{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"id":"D23","name":"Boundary Type-Coupling","shortDescription":{"text":"Boundary Type-Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D23"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX8","name":"Test isolation","shortDescription":{"text":"Test isolation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX8"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"id":"SC1","name":"Supply-chain hygiene","shortDescription":{"text":"Supply-chain hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/SC1"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::sql_statement_to_plan_with_context_impl (cyclomatic 215): SqlToRel::sql_statement_to_plan_with_context_impl has cyclomatic complexity 215 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"075e1f965fa63090da7273250a14a1fb9be2fd2ec1c665bd1940672aae13a371"}},{"ruleId":"D1","level":"warning","message":{"text":"Simplifier::f_up (cyclomatic 194): Simplifier::f_up has cyclomatic complexity 194 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3b61df1998ec952fe4f6d53339f984ae15137a2ede1bc589252a810033329b4"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::deserialize (cyclomatic 136): ScalarValue::deserialize has cyclomatic complexity 136 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":8805}}}],"partialFingerprints":{"codehealthFindingId/v1":"9286083c56b7060019dd2fa9fd9960e8e6c4887eb771c75561a1adb6d41a2577"}},{"ruleId":"D1","level":"warning","message":{"text":"ArrowType::deserialize (cyclomatic 124): ArrowType::deserialize has cyclomatic complexity 124 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"946092d89f92fd1c819c7fcca1aefa5548035564e1750b1a9f82312abd7a2183"}},{"ruleId":"D1","level":"warning","message":{"text":"Unparser::select_to_sql_recursively (cyclomatic 124): Unparser::select_to_sql_recursively has cyclomatic complexity 124 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8ee381c97f5fc18c99b83fec5dabe3c7248864f6673d770605c53a730fe654d"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultPhysicalPlanner::map_logical_node_to_physical (cyclomatic 121): DefaultPhysicalPlanner::map_logical_node_to_physical has cyclomatic complexity 121 (threshold 15). Of this number, 117 points are the body\u0027s own statements and 4 belong to one function item inside it that branches. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"544d45c7b5a0db9ec7478ec8acd35ebdca0ea0ee1a58bc21fafbee580a4973c5"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalPlanNode::deserialize (cyclomatic 121): PhysicalPlanNode::deserialize has cyclomatic complexity 121 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":21503}}}],"partialFingerprints":{"codehealthFindingId/v1":"4429bd820d7058d611493b5af646a3ad057fc2732855996a62445fd3d312df95"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::eq (cyclomatic 112): ScalarValue::eq has cyclomatic complexity 112 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f7ec76faf2e5fcf73d6d44d874e48463ba48635d081b4a991b7e8affb547aeb"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::partial_cmp (cyclomatic 110): ScalarValue::partial_cmp has cyclomatic complexity 110 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3d8467967bb8cdb237f594b41d253d6f7146c3e9db01a701ba0dfe4e902cb30"}},{"ruleId":"D1","level":"warning","message":{"text":"ParquetOptions::deserialize (cyclomatic 109): ParquetOptions::deserialize has cyclomatic complexity 109 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":6733}}}],"partialFingerprints":{"codehealthFindingId/v1":"7653ae5024691cbb9c6fc29e9119212dbc84976e83afe61c9a6a25096478d439"}},{"ruleId":"D1","level":"warning","message":{"text":"LogicalExprNode::deserialize (cyclomatic 106): LogicalExprNode::deserialize has cyclomatic complexity 106 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":13691}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c6b1277708f203d6b406b79e32426d4e8d34bd62b4f3f82d56ece25a985c6a"}},{"ruleId":"D1","level":"warning","message":{"text":"LogicalPlanNode::deserialize (cyclomatic 103): LogicalPlanNode::deserialize has cyclomatic complexity 103 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":14451}}}],"partialFingerprints":{"codehealthFindingId/v1":"47d284888d991c49b2aba2de6b5700fb3e96929a6c0d0bffec59fc55f5b2435b"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::expr::literal::from_substrait_literal (cyclomatic 96): datafusion_substrait::logical_plan::consumer::expr::literal::from_substrait_literal has cyclomatic complexity 96 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/expr/literal.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"01f480d1f6f5eefef57c34131d416fbad3492a04dcea8b31e3bdca7b208f2d87"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::iter_to_array (cyclomatic 87): ScalarValue::iter_to_array has cyclomatic complexity 87 (threshold 15). Of this number, 82 points are the body\u0027s own statements and 5 belong to one function item inside it that branches. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":2821}}}],"partialFingerprints":{"codehealthFindingId/v1":"27fba64638c309b08ecc2d37de18efd28b0bc1d204f42d16da8d39ed094ed31a"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::to_array_of_size (cyclomatic 87): ScalarValue::to_array_of_size has cyclomatic complexity 87 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":3463}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca0028056b396d79d3b0fca8bc2d7e87c19262b22c8500c2ca18ad0607f741c0"}},{"ruleId":"D1","level":"warning","message":{"text":"ConversionSpecifier::format (cyclomatic 83): ConversionSpecifier::format has cyclomatic complexity 83 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":996}}}],"partialFingerprints":{"codehealthFindingId/v1":"241d1beee8523f411fdfb8cea983ab1404da507b84dda2b1212c0b7d8302f06b"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalExprNode::deserialize (cyclomatic 82): PhysicalExprNode::deserialize has cyclomatic complexity 82 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":19559}}}],"partialFingerprints":{"codehealthFindingId/v1":"a93e0c0ba33dc443a5d0cf977eed3764633b01d81056152bc1d954a95aa055bb"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::sql_function_to_expr (cyclomatic 77): SqlToRel::sql_function_to_expr has cyclomatic complexity 77 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f3204b056ec39256c26e4c3105d25cc5554822daa6df06dd645d68742ab30b5"}},{"ruleId":"D1","level":"warning","message":{"text":"LogicalPlanNode::try_into_logical_plan (cyclomatic 75): LogicalPlanNode::try_into_logical_plan has cyclomatic complexity 75 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/mod.rs"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa3f35944338d4d5bbef5e37bf2dd6b2f5b3c3a4e79d6643e5e7900196621b2d"}},{"ruleId":"D1","level":"warning","message":{"text":"ParquetOptions::serialize (cyclomatic 73): ParquetOptions::serialize has cyclomatic complexity 73 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":6425}}}],"partialFingerprints":{"codehealthFindingId/v1":"69eeaa988e2ad52fd0619d0bcf758dc23c39ebad99b35184939264e6af98eee1"}},{"ruleId":"D1","level":"warning","message":{"text":"CsvOptions::deserialize (cyclomatic 67): CsvOptions::deserialize has cyclomatic complexity 67 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":1841}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa3238781f295ebef23c48975f31d34708cb5397a06f0f24dba2c9afda19bb18"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::eq_array (cyclomatic 66): ScalarValue::eq_array has cyclomatic complexity 66 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":4553}}}],"partialFingerprints":{"codehealthFindingId/v1":"882a925812277ef965ea346226fb8f0ab5047d31ce755bb4cfd9d2cd6423735f"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_expr::type_coercion::functions::get_valid_types (cyclomatic 66): datafusion_expr::type_coercion::functions::get_valid_types has cyclomatic complexity 66 (threshold 15). Of this number, 38 points are the body\u0027s own statements and 28 belong to 8 function items inside it that branch. To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab4de7b98e136e97af173cabfaea75bcc73d135263cbfd78821eac17803bd24f"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::types::from_substrait_type (cyclomatic 66): datafusion_substrait::logical_plan::consumer::types::from_substrait_type has cyclomatic complexity 66 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/types.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8e23cbfe4a0fac57b66e69daac76395c9f009b5ea0a3f1107ff4992932e09b"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::try_from_array (cyclomatic 65): ScalarValue::try_from_array has cyclomatic complexity 65 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":4054}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f108ed4a41b018aa079a02274b13ed13083344eb467bda691d402b6f8f8482b"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::sql_expr_to_logical_expr_internal (cyclomatic 65): SqlToRel::sql_expr_to_logical_expr_internal has cyclomatic complexity 65 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"97d3be539984525592facedbdab99b14961c6553ec9ea9cfbcff2af90189e6cc"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_expr_common::casts::try_cast_numeric_literal (cyclomatic 64): datafusion_expr_common::casts::try_cast_numeric_literal has cyclomatic complexity 64 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/casts.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"460431bc28f4eeff3c5ab7cec67fb8275749628dfb9a021037edd0bf1be64816"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::try_from (cyclomatic 64): ScalarValue::try_from has cyclomatic complexity 64 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/to_proto/mod.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"44da7c2a52551aaa70a204dc9ada12ab1343832ff32e7e1f5044c61202ac6a1e"}},{"ruleId":"D1","level":"warning","message":{"text":"PushDownFilter::rewrite (cyclomatic 63): PushDownFilter::rewrite has cyclomatic complexity 63 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c84e5bc3c33814ebbf019e0687d2a7bab239412734ad81907316617c30d8930"}},{"ruleId":"D1","level":"warning","message":{"text":"Unparser::expr_to_sql_inner (cyclomatic 61): Unparser::expr_to_sql_inner has cyclomatic complexity 61 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: Unparser::scalar_to_sql (cyclomatic 82) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8310f978ce66afa5de220d7a55699244bc5ea90a76b3ead78a4632395f39641"}},{"ruleId":"D1","level":"warning","message":{"text":"Expr::fmt (cyclomatic 60): Expr::fmt has cyclomatic complexity 60 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3559}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f36b12b483edd2cfb0f9b6be03e4a391fdb21a1f72023346b983fb798948b0"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_plan::aggregates::group_values::multi_group_by::make_group_column (cyclomatic 60): datafusion_physical_plan::aggregates::group_values::multi_group_by::make_group_column has cyclomatic complexity 60 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":959}}}],"partialFingerprints":{"codehealthFindingId/v1":"14cc79b0dc5c6bbb6057a0c8134abc7f90e59ada731aed1c25843725bd236d29"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::try_from (cyclomatic 57): ScalarValue::try_from has cyclomatic complexity 57 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"78aed58ec8424f29f9aca0d991f39ff18ec82f3836f6f29511034eb9cc9b227d"}},{"ruleId":"D1","level":"warning","message":{"text":"SchemaDisplay::fmt (cyclomatic 55): SchemaDisplay::fmt has cyclomatic complexity 55 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3006}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff508941b2a55386902326635b5e81d8c197bb3c602adef525d078978134c06"}},{"ruleId":"D1","level":"warning","message":{"text":"LogicalPlan::display (cyclomatic 55): LogicalPlan::display has cyclomatic complexity 55 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":2068}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3f8f3b88c0c5606b35f2b1a4a06b2d387172b97ff839f94bc68c847508c55f2"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::fmt (cyclomatic 52): ScalarValue::fmt has cyclomatic complexity 52 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: ScalarValue::fmt (cyclomatic 59) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":5579}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9e0b4e3ddeeebd3eadfef1f9c80bcf491b744ff9987d163f6199bdec4bd419a"}},{"ruleId":"D1","level":"warning","message":{"text":"CsvWriterOptions::deserialize (cyclomatic 52): CsvWriterOptions::deserialize has cyclomatic complexity 52 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":2384}}}],"partialFingerprints":{"codehealthFindingId/v1":"acd5bbbea80c8491d52e65125c6804240eb1b03589c228bafae2a4001030802b"}},{"ruleId":"D1","level":"warning","message":{"text":"Expr::normalize_eq (cyclomatic 50): Expr::normalize_eq has cyclomatic complexity 50 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":2365}}}],"partialFingerprints":{"codehealthFindingId/v1":"532878dec2068be0ac8750bba7c8e6dde6c3d173411355c20cd60a1729456412"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_expr::planner::create_physical_expr (cyclomatic 48): datafusion_physical_expr::planner::create_physical_expr has cyclomatic complexity 48 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/planner.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"63addaa2ece6c046a4934a90ae98ec2c6a7571a4a154158e3237edf83446136b"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_proto::logical_plan::from_proto::parse_expr (cyclomatic 48): datafusion_proto::logical_plan::from_proto::parse_expr has cyclomatic complexity 48 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"243bb6d74c28293e300bdb93d651c145cce92c313d9ec4dcad668705d3ed0089"}},{"ruleId":"D1","level":"warning","message":{"text":"CreateExternalTableNode::deserialize (cyclomatic 46): CreateExternalTableNode::deserialize has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":4378}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8319fcc9c99eed33757e86978ae7550e5fb97faa700751bed0059c382616535"}},{"ruleId":"D1","level":"warning","message":{"text":"PgJsonVisitor::to_json_value (cyclomatic 45): PgJsonVisitor::to_json_value has cyclomatic complexity 45 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/display.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"d975441fbfe6d2afa5ba0b4862b0a57a6e31344b6afe801992a48b56b4b71fa9"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_proto::logical_plan::to_proto::serialize_expr (cyclomatic 45): datafusion_proto::logical_plan::to_proto::serialize_expr has cyclomatic complexity 45 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/to_proto.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"59a59b58ddb33a6b5aabcce561292651971c1de9b6a02735b188d0fc933cc023"}},{"ruleId":"D1","level":"warning","message":{"text":"CsvOptions::serialize (cyclomatic 45): CsvOptions::serialize has cyclomatic complexity 45 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: ScalarValue::serialize (cyclomatic 47) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":1669}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0200a9c181bbf82d5b7a2889b241e81948e80fd29304866b165559cad4d8333"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_spark::function::math::round::spark_round (cyclomatic 45): datafusion_spark::function::math::round::spark_round has cyclomatic complexity 45 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/round.rs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1a86e7d365b04391900944302cb10c0de78ac153a5cc88557cee19e018ee1f1"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_substrait::logical_plan::producer::expr::literal::to_substrait_literal (cyclomatic 45): datafusion_substrait::logical_plan::producer::expr::literal::to_substrait_literal has cyclomatic complexity 45 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/expr/literal.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fb05c6ed002d6fb72cb3c6f024c1518ace06439910517ea13d0c04c74693e9d"}},{"ruleId":"D1","level":"warning","message":{"text":"FileScanExecConf::deserialize (cyclomatic 43): FileScanExecConf::deserialize has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: one other method here (AggregateExecNode::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":7732}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8e3a0f9a507659f1084d66e0d94ee1890bff78405585bfcf75e89bfd55ac665"}},{"ruleId":"D1","level":"warning","message":{"text":"AggregateExecNode::deserialize (cyclomatic 43): AggregateExecNode::deserialize has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: one other method here (FileScanExecConf::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b70be2fdfdaba5c0728153b2435a0e99b50f8e84c819aa8a8e324dfdbd9173"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_distribution::ensure_distribution_with_stats (cyclomatic 42): datafusion_physical_optimizer::ensure_requirements::enforce_distribution::ensure_distribution_with_stats has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":1363}}}],"partialFingerprints":{"codehealthFindingId/v1":"3084dc5b29ea5746de2ef640f15d9563209bd0ae89f03955026570e44ce790f1"}},{"ruleId":"D1","level":"warning","message":{"text":"LogicalPlan::with_new_exprs (cyclomatic 40): LogicalPlan::with_new_exprs has cyclomatic complexity 40 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"700dca286188dc8392926faa58d7b4642c2bb475f9265433d5747521f0462329"}},{"ruleId":"D1","level":"warning","message":{"text":"ListingTableScanNode::deserialize (cyclomatic 40): ListingTableScanNode::deserialize has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: one other method here (PlanType::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":13142}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5cadc6756b0445ff3e63e8b52c78c1c3bb43ed22ef5fe86d0fb4e2988aa46c5"}},{"ruleId":"D1","level":"warning","message":{"text":"PlanType::deserialize (cyclomatic 40): PlanType::deserialize has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: one other method here (ListingTableScanNode::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23970}}}],"partialFingerprints":{"codehealthFindingId/v1":"bee474878ca634d53dd267addc7578ef19b706f409dd88d72e5008de92e5f818"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::convert_simple_data_type (cyclomatic 40): SqlToRel::convert_simple_data_type has cyclomatic complexity 40 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/planner.rs"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ecd50cf957f59dc153d8cc145a89cbceedb8decdc8df95a80d565c416b7f86e"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_substrait::logical_plan::producer::types::to_substrait_type_from_field (cyclomatic 40): datafusion_substrait::logical_plan::producer::types::to_substrait_type_from_field has cyclomatic complexity 40 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/types.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"0005978e9e95b87e66242de462d709e0f27b2a1b27cb594cf4eb98dd661bb3a2"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_datasource::write::demux::compute_partition_keys_by_row (cyclomatic 38): datafusion_datasource::write::demux::compute_partition_keys_by_row has cyclomatic complexity 38 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/write/demux.rs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"06d983d0ad4f74a0782836ab1e638a1b85929f74e86fda562e028f15cec5a608"}},{"ruleId":"D1","level":"warning","message":{"text":"Expr::nullable (cyclomatic 38): Expr::nullable has cyclomatic complexity 38 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f280fc72050f16d44203152dcbd5a0c98b82fbe0997b89f5e8cc08fe2826e29"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions_nested::string::compute_array_to_string (cyclomatic 38): datafusion_functions_nested::string::compute_array_to_string has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"66fedc5944b9404060c92afda0cbdbf8040cc4724e904c225c139222d1fd7951"}},{"ruleId":"D1","level":"warning","message":{"text":"ConversionSpecifier::format_hex_float (cyclomatic 38): ConversionSpecifier::format_hex_float has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1432}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceec5f77b4e8aaa164fade43a4054caf6d10a1aa6e6145c9110c3eb78f0dbcbe"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::datetime::date_bin::date_bin_impl (cyclomatic 37): datafusion_functions::datetime::date_bin::date_bin_impl has cyclomatic complexity 37 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_bin.rs"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"b053edeba50cd33cbe0ccffe736fae15a86b699d85d23312987a71ad9ce48819"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeCoercionRewriter::f_up (cyclomatic 37): TypeCoercionRewriter::f_up has cyclomatic complexity 37 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d2a370551e8195ac48cf115f49947fc5004248a47cfe8c22c478bcfb946fdd8"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_spark::function::math::negative::spark_negative (cyclomatic 37): datafusion_spark::function::math::negative::spark_negative has cyclomatic complexity 37 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/negative.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"00b45eb4e6d49701f5ee33282ad747001e0034dba5f68b253cb9090c08ece24e"}},{"ruleId":"D1","level":"warning","message":{"text":"PullUpCorrelatedExpr::f_up (cyclomatic 36): PullUpCorrelatedExpr::f_up has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"850e835fc61d84832c6c0bf968a1e87eec38b2e5fe53f1cf3a96aa3fab55497c"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_plan::joins::utils::compare_join_arrays (cyclomatic 36): datafusion_physical_plan::joins::utils::compare_join_arrays has cyclomatic complexity 36 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":2553}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9fd0eada0daa8471edb5db56f05051192afb294c38104d67f80efb75b9b6a9d"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_spark::function::string::format_string::take_conversion_specifier (cyclomatic 36): datafusion_spark::function::string::format_string::take_conversion_specifier has cyclomatic complexity 36 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":727}}}],"partialFingerprints":{"codehealthFindingId/v1":"7942b15cde9a26a674a57267421f8b2b6334b853fb50bd24c97f295ded653e34"}},{"ruleId":"D1","level":"warning","message":{"text":"NativeType::fmt (cyclomatic 35): NativeType::fmt has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: NativeType::default_cast_for (cyclomatic 51) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/types/native.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f6ec3e6edfbe4d6f2b74faae9bd4cc7545995f938f04783aa3127603dbedbc6"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlDisplay::fmt (cyclomatic 35): SqlDisplay::fmt has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: Expr::variant_name (cyclomatic 37) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3303}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b38905ca551e6217f25f88a26b3c668e6e0893d521716532bc72b6ced16cb93"}},{"ruleId":"D1","level":"warning","message":{"text":"ConcatWsFunc::invoke_with_args (cyclomatic 35): ConcatWsFunc::invoke_with_args has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat_ws.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"916e6218cd494b0e2baf34c223454b726c1f72dcd05fef52650a03ddc45e3df8"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_plan::windows::window_equivalence_properties (cyclomatic 35): datafusion_physical_plan::windows::window_equivalence_properties has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/mod.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"74fe87f75ca4d81a19121cbb5d4c62105b7856cfeaf03261b1b2d2e3f4d8ed98"}},{"ruleId":"D1","level":"warning","message":{"text":"CsvWriterOptions::serialize (cyclomatic 35): CsvWriterOptions::serialize has cyclomatic complexity 35 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: ScalarValue::serialize (cyclomatic 47) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":2264}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cbed31cf255c20ad378955bb9eb9fb9eb7cbe5eb6c983ce02a9d3562e103913"}},{"ruleId":"D1","level":"warning","message":{"text":"HashJoinExecNode::deserialize (cyclomatic 34): HashJoinExecNode::deserialize has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9804}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb6653d38ec1bbf95782064f63cc9350710101d614a07581b5c953d8a5863b1"}},{"ruleId":"D1","level":"warning","message":{"text":"ConversionSpecifier::format_time_component (cyclomatic 34): ConversionSpecifier::format_time_component has cyclomatic complexity 34 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":2143}}}],"partialFingerprints":{"codehealthFindingId/v1":"d20e8d24d7f8fd5bb15835fa6792cddfc3f06673409d3bfd3bc23092fc0173d2"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::regex::regexpcount::regexp_count_inner (cyclomatic 33): datafusion_functions::regex::regexpcount::regexp_count_inner has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"b63784faf7667a037ce6221166ef25b66350e193e87cc200370b9bda208ece34"}},{"ruleId":"D1","level":"warning","message":{"text":"PropagateEmptyRelation::rewrite (cyclomatic 32): PropagateEmptyRelation::rewrite has cyclomatic complexity 32 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/propagate_empty_relation.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bded0187ad6410fcc2742d02338c11754e43b68cd8f105e9e29866b3f5da20d"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_expr::expressions::in_list::primitive_filter::instantiate_branchless_filter (cyclomatic 32): datafusion_physical_expr::expressions::in_list::primitive_filter::instantiate_branchless_filter has cyclomatic complexity 32 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/in_list/primitive_filter.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"a66de0e504f7a1dc6337ed58e6d4b0db0b637939ce1963352c2d41b72fd6f3dc"}},{"ruleId":"D1","level":"warning","message":{"text":"LogicalPlan::max_rows (cyclomatic 31): LogicalPlan::max_rows has cyclomatic complexity 31 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":1446}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56096599bab7604a6ee6aefe062d8f5653895910f306bfa6a687320e15a1143"}},{"ruleId":"D1","level":"warning","message":{"text":"CreateExternalTableNode::serialize (cyclomatic 31): CreateExternalTableNode::serialize has cyclomatic complexity 31 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":4276}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab13e7cc9ab957134122bc7826cc4daa9219d89abd395daa5a5f15eae9a286dc"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowExprNode::deserialize (cyclomatic 31): WindowExprNode::deserialize has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: one other method here (PhysicalWindowExprNode::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":29874}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c04623592b7756b0bbd4840e10636950cd30e3e0015c291eaead3525d000d2"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalWindowExprNode::deserialize (cyclomatic 31): PhysicalWindowExprNode::deserialize has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: one other method here (WindowExprNode::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23275}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f695c3f91b0bdedb6efbb498b9bc2ab729df5b85a3f323b5b23dba5d3e6b2c"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_pruning::pruning_predicate::build_predicate_expression (cyclomatic 31): datafusion_pruning::pruning_predicate::build_predicate_expression has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":1732}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbdc16f98baa615a126adb8cdddf59374875357a052c035fb618347744994793"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionStateBuilder::build (cyclomatic 29): SessionStateBuilder::build has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02c954a965e4b28f068a9be585bb33762dc4504d8b0b882e1a5506bf162e99a"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_requirement_to_children (cyclomatic 29): datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_requirement_to_children has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"a62f0359076e241f220b529dc2ebf0ea2b15889590bef6a2ff469e81eac1d1f4"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_plan::joins::hash_join::exec::collect_left_input (cyclomatic 29): datafusion_physical_plan::joins::hash_join::exec::collect_left_input has cyclomatic complexity 29 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":3027}}}],"partialFingerprints":{"codehealthFindingId/v1":"1469ad836d6ac42e4c28c07b1f3d59de146e4ec2e62d8c482f2a4e2eaa8ad5d0"}},{"ruleId":"D1","level":"warning","message":{"text":"FileScanExecConf::serialize (cyclomatic 29): FileScanExecConf::serialize has cyclomatic complexity 29 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (AggregateExecNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":7632}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5ee3a80c5700b2966a468b0473b15340b42c7534b4cdb9aed86befa0c630776"}},{"ruleId":"D1","level":"warning","message":{"text":"AggregateExecNode::serialize (cyclomatic 29): AggregateExecNode::serialize has cyclomatic complexity 29 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (FileScanExecConf::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"b501a5e5752964380c093a43a7314e885ce5e4ec6f6e2806b4b9f880012295e4"}},{"ruleId":"D1","level":"warning","message":{"text":"DateTruncFunc::invoke_with_args (cyclomatic 28): DateTruncFunc::invoke_with_args has cyclomatic complexity 28 (threshold 15). Of this number, 24 points are the body\u0027s own statements and 4 belong to 2 function items inside it that branch. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_trunc.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"152333f019e306c41c8725c528b3a06bd6cf09374e4e6e31a545ffbf8db7306e"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::math::round::round_columnar (cyclomatic 28): datafusion_functions::math::round::round_columnar has cyclomatic complexity 28 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"6924ca388a9d7efa80988f3f2f814fd412512450b0606a7a540d4333fd9242e4"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_optimizer::optimize_projections::optimize_projections (cyclomatic 28): datafusion_optimizer::optimize_projections::optimize_projections has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/optimize_projections/mod.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad772065210db03eb28d07de7b8840ce22635318bb0203749817b7750e950a47"}},{"ruleId":"D1","level":"warning","message":{"text":"TreeRenderVisitor::render_box_content (cyclomatic 28): TreeRenderVisitor::render_box_content has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":1072}}}],"partialFingerprints":{"codehealthFindingId/v1":"d41116864297274f03317f4a5112779e3f4246dabef3043cdbfbd264ae3d8357"}},{"ruleId":"D1","level":"warning","message":{"text":"JoinNode::deserialize (cyclomatic 28): JoinNode::deserialize has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AnalyzeExecNode::deserialize, CsvScanExecNode::deserialize, FileSinkConfig::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":11601}}}],"partialFingerprints":{"codehealthFindingId/v1":"938489ad836bdb1eb8684402294f364472d6212456a562e146f093a153361015"}},{"ruleId":"D1","level":"warning","message":{"text":"FileSinkConfig::deserialize (cyclomatic 28): FileSinkConfig::deserialize has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AnalyzeExecNode::deserialize, CsvScanExecNode::deserialize, JoinNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":8032}}}],"partialFingerprints":{"codehealthFindingId/v1":"39a999d473c108d82467b067c131fb946482baa6ac53e4867cf6eb9191c2f0e6"}},{"ruleId":"D1","level":"warning","message":{"text":"CsvScanExecNode::deserialize (cyclomatic 28): CsvScanExecNode::deserialize has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AnalyzeExecNode::deserialize, FileSinkConfig::deserialize, JoinNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":5067}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a4392f8db41dc64f7bb315f05461a6c0308025d8752399520b65a9f246386b4"}},{"ruleId":"D1","level":"warning","message":{"text":"SymmetricHashJoinExecNode::deserialize (cyclomatic 28): SymmetricHashJoinExecNode::deserialize has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AnalyzeExecNode::deserialize, CsvScanExecNode::deserialize, FileSinkConfig::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":27780}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc9a93b5ca34083cc77fd7837ca2c4a50c0717e5b03c5e99d486582f6aacc08a"}},{"ruleId":"D1","level":"warning","message":{"text":"AnalyzeExecNode::deserialize (cyclomatic 28): AnalyzeExecNode::deserialize has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (CsvScanExecNode::deserialize, FileSinkConfig::deserialize, JoinNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e95080b6612f5ef896ae2ad76358bcf5093b77813aef8561c8aff57e5a46f10"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_spark::function::math::abs::spark_abs (cyclomatic 28): datafusion_spark::function::math::abs::spark_abs has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/abs.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"55dfa4c0b4bb3bb327639565c5e59e5bece85f9369ebd53188b69bf9269751eb"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_distribution::enforce_distribution_relationships (cyclomatic 27): datafusion_physical_optimizer::ensure_requirements::enforce_distribution::enforce_distribution_relationships has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":1122}}}],"partialFingerprints":{"codehealthFindingId/v1":"001f6a5e0a16820756d2959c3640503c6a3067c9a217175d010e23b467f3ccf6"}},{"ruleId":"D1","level":"warning","message":{"text":"GroupedHashAggregateStream::poll_next (cyclomatic 27): GroupedHashAggregateStream::poll_next has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"c23be9a67a74d33f7235def1fb3f34c66e7e31ef4b27f549480f24fe2fae848d"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_spark::function::math::width_bucket::width_bucket_interval_mdn_exact (cyclomatic 27): datafusion_spark::function::math::width_bucket::width_bucket_interval_mdn_exact has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/width_bucket.rs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"09b234bb6083107219e88e59711574861de4679ee18d8893a4eb0465a8dd852e"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarValue::distance_u64 (cyclomatic 26): ScalarValue::distance_u64 has cyclomatic complexity 26 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: ScalarValue::fmt (cyclomatic 59) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":2669}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba99ee38006bff7593e407800af5666584ace91344e08a73bfcd681f4a2f7800"}},{"ruleId":"D1","level":"warning","message":{"text":"Expr::get_type (cyclomatic 26): Expr::get_type has cyclomatic complexity 26 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"d94f0b12d29df2c610164100db2f5508fad23b28a38e8cdba9f98051aabdd475"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::unicode::lpad::lpad_impl (cyclomatic 26): datafusion_functions::unicode::lpad::lpad_impl has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"93063794074a2a472fe88e44a33d04df6c69ec53a01db1bbf75c00a405df4cf0"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::unicode::rpad::rpad_impl (cyclomatic 26): datafusion_functions::unicode::rpad::rpad_impl has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/rpad.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"458ba6c020a7f1fc400b1141bab7919a3943fc89997fd2989b5fe49bfce8ae55"}},{"ruleId":"D1","level":"warning","message":{"text":"ConcatFunc::invoke_with_args (cyclomatic 25): ConcatFunc::invoke_with_args has cyclomatic complexity 25 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"d216563b020e0384724d65dd0eb6628e3de45023cee7d94504d5aa6cc5e19a69"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_optimizer::push_down_filter::push_down_all_join (cyclomatic 25): datafusion_optimizer::push_down_filter::push_down_all_join has cyclomatic complexity 25 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d679d36b7e9f2c05881982e4fcd103ef50d6d865d05f24f98108780ba8ef67c"}},{"ruleId":"D1","level":"warning","message":{"text":"BinaryExpr::evaluate (cyclomatic 25): BinaryExpr::evaluate has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7a9cfd1ed938d9249fff185ca2687ef045101a8749571926e851573f4ede0a3"}},{"ruleId":"D1","level":"warning","message":{"text":"CsvOptions::try_from (cyclomatic 25): CsvOptions::try_from has cyclomatic complexity 25 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/from_proto.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"e566d9a1eaa6c68e7adeb105cc65f27ee18fda8c04a64fa92b0c252bedfa4816"}},{"ruleId":"D1","level":"warning","message":{"text":"AsOfJoinNode::deserialize (cyclomatic 25): AsOfJoinNode::deserialize has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 2 other methods here (PhysicalAggregateExprNode::deserialize, SortMergeJoinExecNode::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1937}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a4c4422a6f7608563c65a189f124ce64b8f51e15c1f6054d004d00b9ef2a8d"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalAggregateExprNode::deserialize (cyclomatic 25): PhysicalAggregateExprNode::deserialize has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 2 other methods here (AsOfJoinNode::deserialize, SortMergeJoinExecNode::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18391}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d6b1bfc91402e9705c14b871423fceeb117e4037e1de9a7a8f7c636b1c9791e"}},{"ruleId":"D1","level":"warning","message":{"text":"SortMergeJoinExecNode::deserialize (cyclomatic 25): SortMergeJoinExecNode::deserialize has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 2 other methods here (AsOfJoinNode::deserialize, PhysicalAggregateExprNode::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":26897}}}],"partialFingerprints":{"codehealthFindingId/v1":"466817ad6f7fe7654500a37d4e9719f5487562fec7c3cb3dd882b988acbca379"}},{"ruleId":"D1","level":"warning","message":{"text":"ConversionSpecifier::format_float (cyclomatic 25): ConversionSpecifier::format_float has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: TimeFormat::try_from (cyclomatic 31) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1691}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4726bc07ec829200e69a71a5ef71e6402d6137552e008acd75d06f669ce4606"}},{"ruleId":"D1","level":"warning","message":{"text":"ListingTableFactory::create_inner (cyclomatic 24): ListingTableFactory::create_inner has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/listing_table_factory.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0c3d39b807a98f8b57594d7a8dc6a4b1ae67df1f339884938e1df5d23f8484e"}},{"ruleId":"D1","level":"warning","message":{"text":"AlignedBoundaryStream::poll_next (cyclomatic 24): AlignedBoundaryStream::poll_next has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/boundary_stream.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca9613be2ae6deb43615e84eb42fd6ff569cee743e581c794d431a8d7537f806"}},{"ruleId":"D1","level":"warning","message":{"text":"ScanState::poll_scan (cyclomatic 24): ScanState::poll_scan has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_stream/scan_state.rs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"595c0e2a71c02c0f8236b3f9e10d7e579552c905cc095d89f6cc948ec5108bd6"}},{"ruleId":"D1","level":"warning","message":{"text":"PagePruningAccessPlanFilter::prune_plan_with_page_index_and_metrics (cyclomatic 24): PagePruningAccessPlanFilter::prune_plan_with_page_index_and_metrics has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/page_filter.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2834af37cda6d7d6a1a41a828251f52a2335fdb1582a335f2d50de6a40e51fb"}},{"ruleId":"D1","level":"warning","message":{"text":"Expr::to_field (cyclomatic 24): Expr::to_field has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"051e6809da31d0e4e19afd1a0acae4445ff43a9a1b229387e1a7d4da19b3962e"}},{"ruleId":"D1","level":"warning","message":{"text":"BinaryExpr::propagate_constraints (cyclomatic 24): BinaryExpr::propagate_constraints has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":728}}}],"partialFingerprints":{"codehealthFindingId/v1":"7494ee01bd6be702c014a758605d3393b736f1fa3737e935fd12405f7cd7b637"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_plan::aggregates::group_values::new_group_values (cyclomatic 24): datafusion_physical_plan::aggregates::group_values::new_group_values has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/mod.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e7396dd0c1622d53e712afb12f533eb2f09608a4982af8a43b9b3536cc58341"}},{"ruleId":"D1","level":"warning","message":{"text":"Unparser::unparse_table_scan_pushdown (cyclomatic 24): Unparser::unparse_table_scan_pushdown has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":2515}}}],"partialFingerprints":{"codehealthFindingId/v1":"629c203192148bc3ba5e5230b12b57fb126a791bf92500395b67ff72f7456760"}},{"ruleId":"D1","level":"warning","message":{"text":"LogicalPlan::map_expressions (cyclomatic 23): LogicalPlan::map_expressions has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: LogicalPlan::map_children (cyclomatic 27) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/tree_node.rs"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"14267ef70daa0451fe19040e69e8c86bef55d18f3b446a3bc2aadbcf1c207ee3"}},{"ruleId":"D1","level":"warning","message":{"text":"PredicateBoundsEvaluator::evaluate_bounds (cyclomatic 23): PredicateBoundsEvaluator::evaluate_bounds has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/predicate_bounds.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e49b3fb25b4baa901b6af6d4dea9683687ade22cece661afc80feeef447e3c2"}},{"ruleId":"D1","level":"warning","message":{"text":"TypeSignature::to_string_repr_with_names (cyclomatic 23): TypeSignature::to_string_repr_with_names has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: datafusion_expr_common::signature::get_data_types (cyclomatic 30) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/signature.rs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"957f8f0c61c208e9a2b69927f39468ca14129f67d8ea272475c778554a60884b"}},{"ruleId":"D1","level":"warning","message":{"text":"RoundFunc::invoke_with_args (cyclomatic 23): RoundFunc::invoke_with_args has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"9efcb9495c72ec6ccf0e62ec87ad8b7e8668ed08d95f75a93c7b3283e901d8ca"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_optimizer::push_down_limit::topk_through_join::push_topk_through_join (cyclomatic 23): datafusion_optimizer::push_down_limit::topk_through_join::push_topk_through_join has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_limit/topk_through_join.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca0b2c354ecfb2b246bfdd78ac9e308c10eb0ac6a4130185f21bd755b1477a0d"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_optimizer::decorrelate_lateral_join::rewrite_internal (cyclomatic 23): datafusion_optimizer::decorrelate_lateral_join::rewrite_internal has cyclomatic complexity 23 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate_lateral_join.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"7399fae7439091ee12e58807cd69ee5db011915bc4ce70348f7ce9907eeaae45"}},{"ruleId":"D1","level":"warning","message":{"text":"ListingTableScanNode::serialize (cyclomatic 23): ListingTableScanNode::serialize has cyclomatic complexity 23 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":13060}}}],"partialFingerprints":{"codehealthFindingId/v1":"7817a12e3a789e843445a8cd3c88a4afd1a5314825b1a7d6f30908f8290a2161"}},{"ruleId":"D1","level":"warning","message":{"text":"HashJoinExecNode::serialize (cyclomatic 23): HashJoinExecNode::serialize has cyclomatic complexity 23 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9718}}}],"partialFingerprints":{"codehealthFindingId/v1":"f782fbf12e5c658e205b290151213e33be9f101a42e2321475e7e291ba04153c"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion::bin::print_functions_docs::print_docs (cyclomatic 22): datafusion::bin::print_functions_docs::print_docs has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/bin/print_functions_docs.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4ea5832b275bff3001ed3dea5ac567f3692e243cc18137093e6d3daea296c56"}},{"ruleId":"D1","level":"warning","message":{"text":"BinaryTypeCoercer::signature_inner (cyclomatic 22): BinaryTypeCoercer::signature_inner has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"91568d26f5fd0e3434cec50e790bcb34e13ef41a4884105fc6a59983036d7511"}},{"ruleId":"D1","level":"warning","message":{"text":"ColumnarValueRef::from_columnar_value (cyclomatic 22): ColumnarValueRef::from_columnar_value has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/strings.rs"},"region":{"startLine":1280}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4c18e8095e720e15cf0513c31539656d8acd9d69fca550c7124f4f7c6b1c380"}},{"ruleId":"D1","level":"warning","message":{"text":"JoinStatisticsProvider::compute_statistics (cyclomatic 22): JoinStatisticsProvider::compute_statistics has cyclomatic complexity 22 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 4 belong to one function item inside it that branches. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/operator_statistics/mod.rs"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"a588adbfdb158934012bcaec8eaf8dcdb25071098ec2ed1fe577f14e0303e9fd"}},{"ruleId":"D1","level":"warning","message":{"text":"CsvWriterOptions::try_from (cyclomatic 22): CsvWriterOptions::try_from has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"a766c0b7f8d71dd22757ac4cee3ac2554356c911e1eee1bfa5150b4fe895956b"}},{"ruleId":"D1","level":"warning","message":{"text":"ParquetColumnOptions::deserialize (cyclomatic 22): ParquetColumnOptions::deserialize has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: ScalarValue::serialize (cyclomatic 47) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":6081}}}],"partialFingerprints":{"codehealthFindingId/v1":"f522fe19af8c84bc358ef82ecd4983bb5669b77a154114eac9ca2ce3eb042ea4"}},{"ruleId":"D1","level":"warning","message":{"text":"UnnestNode::deserialize (cyclomatic 22): UnnestNode::deserialize has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AggregateUdfExprNode::deserialize, AsOfJoinExecNode::deserialize, PartitionedFile::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":28812}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a0dfcac438f41c7f42bfa000f27c75319d2b85454404301c0421a9652ca1c30"}},{"ruleId":"D1","level":"warning","message":{"text":"AggregateUdfExprNode::deserialize (cyclomatic 22): AggregateUdfExprNode::deserialize has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AsOfJoinExecNode::deserialize, PartitionedFile::deserialize, PiecewiseMergeJoinExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":706}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f1d9335e1f9f481ed6bfdb6c72ba313ae1fed17633a5598e0ab18415f5ba5d7"}},{"ruleId":"D1","level":"warning","message":{"text":"PartitionedFile::deserialize (cyclomatic 22): PartitionedFile::deserialize has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AggregateUdfExprNode::deserialize, AsOfJoinExecNode::deserialize, PiecewiseMergeJoinExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18041}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b3515da9653003ee0c2aa01690a97f1024b26d9e7d2509fae4973adb2a02f83"}},{"ruleId":"D1","level":"warning","message":{"text":"PiecewiseMergeJoinExecNode::deserialize (cyclomatic 22): PiecewiseMergeJoinExecNode::deserialize has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AggregateUdfExprNode::deserialize, AsOfJoinExecNode::deserialize, PartitionedFile::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23512}}}],"partialFingerprints":{"codehealthFindingId/v1":"e59929233f06e894adc88f804b0d7fbf5e2bdb08ec2d7b0cc69f8d24d54a4a1f"}},{"ruleId":"D1","level":"warning","message":{"text":"AsOfJoinExecNode::deserialize (cyclomatic 22): AsOfJoinExecNode::deserialize has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 4 other methods here (AggregateUdfExprNode::deserialize, PartitionedFile::deserialize, PiecewiseMergeJoinExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1728}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5e1438d467cd4d3251473e57661ef901cf47b513c59fa98492e664d8282f82a"}},{"ruleId":"D1","level":"warning","message":{"text":"FormatStringFunc::invoke_with_args (cyclomatic 22): FormatStringFunc::invoke_with_args has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: TimeFormat::try_from (cyclomatic 31) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7da53d7208194e5ee843e253c0438e53151c3a7b969cce1a1a8a63a081663ce"}},{"ruleId":"D1","level":"warning","message":{"text":"ParseUrl::parse (cyclomatic 22): ParseUrl::parse has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/url/parse_url.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf10ca5e3de101811e39dfd9ce58e51c32bd4792eec90ab4f38375a82460ef82"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::select_to_plan (cyclomatic 22): SqlToRel::select_to_plan has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8154092bba1b63c13f3c7634a46bf449e90a7d870cbdc8693d6d4f77c601ab7"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_sqllogictest::bin::sqllogictests::run_tests (cyclomatic 22): datafusion_sqllogictest::bin::sqllogictests::run_tests has cyclomatic complexity 22 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/bin/sqllogictests.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cc89c28f8b6d82a6fcfa3f80e7a8c8f319032c649668412f504567171f92319"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::rel::read_rel::from_read_rel (cyclomatic 22): datafusion_substrait::logical_plan::consumer::rel::read_rel::from_read_rel has cyclomatic complexity 22 (threshold 15). Of this number, 18 points are the body\u0027s own statements and 4 belong to 2 function items inside it that branch. To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/rel/read_rel.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f7c589790e3495ded1e51782992ef1e343d369b4489d7cf542204912ff9336"}},{"ruleId":"D1","level":"warning","message":{"text":"check_asf_yaml_status_checks.check_post_merge_conditions (cyclomatic 22): check_asf_yaml_status_checks.check_post_merge_conditions has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ci/scripts/check_asf_yaml_status_checks.py"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1daee76ca1e9e81968c39bf1ad5c6307016be2288c5cd8052b98e90d8e3be8c"}},{"ruleId":"D1","level":"warning","message":{"text":"BloomFilterStatistics::check_scalar (cyclomatic 21): BloomFilterStatistics::check_scalar has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/bloom_filter.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d262efcf98c949a37f76bbd630e71aa03c1d225c1d5cbaff1f61085d1d9528c"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::string::concat::simplify_concat (cyclomatic 21): datafusion_functions::string::concat::simplify_concat has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat.rs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a014b58773005fab5e9efa47c580cc082c54aa9204e9155e5b15f30109d44ca"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultPhysicalExprAdapterRewriter::try_narrow_struct_cast (cyclomatic 21): DefaultPhysicalExprAdapterRewriter::try_narrow_struct_cast has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-adapter/src/schema_rewriter.rs"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"725a6d726989a610128fe76d2ee94729471f36b3ba245afc6434ce17d44ce84f"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_expr_common::datum::compare_op_for_nested (cyclomatic 21): datafusion_physical_expr_common::datum::compare_op_for_nested has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/datum.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"83c70a21ef6b85dcc496f3d78e60a666580a906153d8c57a505c720ac1ac8ecb"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_spark::function::url::url_decode::spark_handled_url_decode (cyclomatic 21): datafusion_spark::function::url::url_decode::spark_handled_url_decode has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/url/url_decode.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d2a5b010494157fef8fdaffdaf9d6e55247c91e2932d2c1311d49d28ba614c4"}},{"ruleId":"D1","level":"warning","message":{"text":"DFParser::parse_create_external_table (cyclomatic 21): DFParser::parse_create_external_table has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":1207}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b8aa20aa8194230e01384f3b2c98e32ba0c5c91851a2e584fcecce976c1b90e"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::merge_clause_to_plan (cyclomatic 21): SqlToRel::merge_clause_to_plan has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":2664}}}],"partialFingerprints":{"codehealthFindingId/v1":"4906619246afbd89d1c18fc60d8bf3c56d2e83203c502c3fb555e36a00400305"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_expr::expressions::binary::check_short_circuit (cyclomatic 20): datafusion_physical_expr::expressions::binary::check_short_circuit has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":1260}}}],"partialFingerprints":{"codehealthFindingId/v1":"38b7a8981d1ee5ce4ea2749f9b4159ad0d04fafa0f6db223a02db1c9e50b98c9"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_sorts_helper (cyclomatic 20): datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_sorts_helper has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ac0b00a1623d01c572001e849f25a87c4f8ce36a72b3b22d0ca98296ae2bb88"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowExprNode::serialize (cyclomatic 20): WindowExprNode::serialize has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (PhysicalWindowExprNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":29797}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca8f5846416388680831b474e52c04edec53b2ebfd12bc290ce7d7791f0e0724"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalWindowExprNode::serialize (cyclomatic 20): PhysicalWindowExprNode::serialize has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (WindowExprNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23200}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c48d068cfc73259eef3121a8f2d909f7c521ad6e08747a73427a5e58cff2a31"}},{"ruleId":"D1","level":"warning","message":{"text":"DFSchema::datatype_is_semantically_equal (cyclomatic 19): DFSchema::datatype_is_semantically_equal has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: datafusion_common::dfschema::format_simple_data_type (cyclomatic 31) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9959eaeb09bd45fae065e0bbeba0fb1b864544a72a64716186093286095176a"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultPhysicalPlanner::handle_explain (cyclomatic 19): DefaultPhysicalPlanner::handle_explain has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":2860}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b21aaac7c40b5cf088b12b2a8e753113f915edcf353b98a7b3cb949d8d16db"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_expr::higher_order_function::resolve_higher_order_function (cyclomatic 19): datafusion_expr::higher_order_function::resolve_higher_order_function has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"aedfed71ca85655a6a25149d7c31c3c104a39fb1d561d6d0d3ad2655bdaed3d6"}},{"ruleId":"D1","level":"warning","message":{"text":"TruncFunc::invoke_with_args (cyclomatic 19): TruncFunc::invoke_with_args has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/trunc.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a1626d7258c14421984edc1db7d67714faef38977f4379a212061bcd91d9dc3"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::string::concat_ws::simplify_concat_ws (cyclomatic 19): datafusion_functions::string::concat_ws::simplify_concat_ws has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat_ws.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"8966b07da7d1f0ef7664302e2543d97df4a23f87bd79cf6583fa4ece604978b5"}},{"ruleId":"D1","level":"warning","message":{"text":"BytesValueState::take (cyclomatic 19): BytesValueState::take has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last/state.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3a5f7a6876547dfc1dafa024364142e2285630f9d6362fd2579454aed5bae50"}},{"ruleId":"D1","level":"warning","message":{"text":"MinMaxBytesAccumulator::build_array (cyclomatic 19): MinMaxBytesAccumulator::build_array has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max/min_max_bytes.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d1f1d5d4c3e20b2da9b8fdc8079ffe104b0f129bd86c75249c011a232fb850"}},{"ruleId":"D1","level":"warning","message":{"text":"Range::gen_range_timestamp (cyclomatic 19): Range::gen_range_timestamp has cyclomatic complexity 19 (threshold 15). Of this number, 17 points are the body\u0027s own statements and 2 belong to one function item inside it that branches. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/range.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e871dd88d0dd26eced6f28115d02c5985ea08f954c8c147fb8284d3b767a62a"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowShiftEvaluator::evaluate (cyclomatic 19): WindowShiftEvaluator::evaluate has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-window/src/lead_lag.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7e63e4eb783bd15808df0ffdce6604c063664bb4ee83c9ea07f3c726d0b4e28"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_optimizer::optimizer::map_children_mut (cyclomatic 19): datafusion_optimizer::optimizer::map_children_mut has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/optimizer.rs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"64d443c4293d8cd18a9aa30d3b5dc19cdc46c02f4c4a71e64e38a42c295e37b9"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_optimizer::extract_leaf_expressions::split_and_push_projection (cyclomatic 19): datafusion_optimizer::extract_leaf_expressions::split_and_push_projection has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/extract_leaf_expressions.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b4fe042cadc35e51416821ec282ecbd78aca2762677cea852d0422dc6b2aaa"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_plan::joins::nested_loop_join::build_unmatched_batch (cyclomatic 19): datafusion_physical_plan::joins::nested_loop_join::build_unmatched_batch has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3879}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4b1b67c70c9e5839d6d12466038271f5e9427518d5440b45bde705f6fd331e9"}},{"ruleId":"D1","level":"warning","message":{"text":"ColumnStats::deserialize (cyclomatic 19): ColumnStats::deserialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: ScalarValue::serialize (cyclomatic 47) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":1163}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdd88ef95019bacb877ac045955a357cb06fb503c934c31fde1052a7ffb45ec5"}},{"ruleId":"D1","level":"warning","message":{"text":"JoinNode::serialize (cyclomatic 19): JoinNode::serialize has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: 3 other methods here (AnalyzeExecNode::serialize, FileSinkConfig::serialize, SymmetricHashJoinExecNode::serialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":11529}}}],"partialFingerprints":{"codehealthFindingId/v1":"98f933c1bfad9db0dcac23d1da98a7545a4b213c3d8f076216666e40d61bb2a6"}},{"ruleId":"D1","level":"warning","message":{"text":"FileSinkConfig::serialize (cyclomatic 19): FileSinkConfig::serialize has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: 3 other methods here (AnalyzeExecNode::serialize, JoinNode::serialize, SymmetricHashJoinExecNode::serialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":7962}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7435f5cf1f568e68dc082d863e2f5037e7017af26cacc85b37a273fce83633a"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalScalarUdfNode::deserialize (cyclomatic 19): PhysicalScalarUdfNode::deserialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":22539}}}],"partialFingerprints":{"codehealthFindingId/v1":"f339057e9da38fb733e73bdc8dcf1c69fb24faf3d35637771337160978b9dae6"}},{"ruleId":"D1","level":"warning","message":{"text":"FilterExecNode::deserialize (cyclomatic 19): FilterExecNode::deserialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 6 other methods here (GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, MemoryScanExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":8250}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ff68daccfc662b40236b191f901a5c0e227ed388b6c0ebdec5a70ea71fee20e"}},{"ruleId":"D1","level":"warning","message":{"text":"ParquetScanExecNode::deserialize (cyclomatic 19): ParquetScanExecNode::deserialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":16814}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee727021cad0440e58ce4647b48e7f591147c3084864d72e5f3dfcef9664dc45"}},{"ruleId":"D1","level":"warning","message":{"text":"CsvScanExecNode::serialize (cyclomatic 19): CsvScanExecNode::serialize has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":4991}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ded45b183cd8caa01a2485bbaff5558d4faa5feceda1e330fd23a36b3897254"}},{"ruleId":"D1","level":"warning","message":{"text":"MemoryScanExecNode::deserialize (cyclomatic 19): MemoryScanExecNode::deserialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":15103}}}],"partialFingerprints":{"codehealthFindingId/v1":"3de83271b8ab0acfb9c1e57a733eb39d1397cc7af8c4a2bf53898f1a437deab3"}},{"ruleId":"D1","level":"warning","message":{"text":"SymmetricHashJoinExecNode::serialize (cyclomatic 19): SymmetricHashJoinExecNode::serialize has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: 3 other methods here (AnalyzeExecNode::serialize, FileSinkConfig::serialize, JoinNode::serialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":27708}}}],"partialFingerprints":{"codehealthFindingId/v1":"4261171459513a2dd9e257e9a8549899a88e7e626540debda5111c530d84c516"}},{"ruleId":"D1","level":"warning","message":{"text":"AnalyzeExecNode::serialize (cyclomatic 19): AnalyzeExecNode::serialize has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: 3 other methods here (FileSinkConfig::serialize, JoinNode::serialize, SymmetricHashJoinExecNode::serialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":995}}}],"partialFingerprints":{"codehealthFindingId/v1":"09a337c98c512865f77e35f548c45c445a463aa038cb7088dc413e7a0285d659"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowAggExecNode::deserialize (cyclomatic 19): WindowAggExecNode::deserialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":29667}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3dd3952314f38cdc1c4c637507ef2110a3ee81283369a60ac33b63723721b68"}},{"ruleId":"D1","level":"warning","message":{"text":"GenerateSeriesArgsTimestamp::deserialize (cyclomatic 19): GenerateSeriesArgsTimestamp::deserialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesNode::deserialize, MemoryScanExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9098}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e53b70ee6d5046045c5be16ae414ffbc75acd6d12ead699b4c49c34d998f95f"}},{"ruleId":"D1","level":"warning","message":{"text":"GenerateSeriesNode::deserialize (cyclomatic 19): GenerateSeriesNode::deserialize has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, MemoryScanExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9345}}}],"partialFingerprints":{"codehealthFindingId/v1":"1968e895dd907b5bde3c02f2007d0a115d419f7e8cfee4e327ff9d6b746ac116"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_spark::function::math::hex::compute_hex (cyclomatic 19): datafusion_spark::function::math::hex::compute_hex has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/hex.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3f787a3778915b179152701beed266111f371cc1e0fd54576bcce77ef70a8e7"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonArrayToNdjsonReader::process_byte (cyclomatic 18): JsonArrayToNdjsonReader::process_byte has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-json/src/utils.rs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e95b770282fab59c388d9db4327539775ea976f128b79fe268fe4875b54cf74"}},{"ruleId":"D1","level":"warning","message":{"text":"PushDecoderStreamState::transition (cyclomatic 18): PushDecoderStreamState::transition has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/push_decoder.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7dbaab57f783eda2d36ab7e19b0b12844c1ed65cadf0c4fe3b2b610a29b35bd"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions_nested::arrays_zip::arrays_zip_inner (cyclomatic 18): datafusion_functions_nested::arrays_zip::arrays_zip_inner has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/arrays_zip.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"2302ebb31b6cf6e59608d4c1506afea1009219adc7eb461f101d7bd8478001d7"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarSubqueryToJoin::rewrite (cyclomatic 18): ScalarSubqueryToJoin::rewrite has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/scalar_subquery_to_join.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"354e06ef3d928b7778a5d622d5f97d54f66b4521f350c78abe2c50865df23741"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_optimizer::push_down_limit::rewrite_limit (cyclomatic 18): datafusion_optimizer::push_down_limit::rewrite_limit has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_limit.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fc9db0ccd6010a8e7656d4d781d15db30cc10d4761f3ca01b06fa86eacaf892"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_optimizer::limit_pushdown::pushdown_limit_helper (cyclomatic 18): datafusion_physical_optimizer::limit_pushdown::pushdown_limit_helper has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/limit_pushdown.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"97dd56eabd2ce935f76e6b24f4dc7971696cb83690ecf59563094befc3db5eca"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedLoopJoinStream::poll_next (cyclomatic 18): NestedLoopJoinStream::poll_next has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":2103}}}],"partialFingerprints":{"codehealthFindingId/v1":"436ce5edf4c48013cfa6e59e8b70efffcd820283a4d12070d2b0ed97f332da2d"}},{"ruleId":"D1","level":"warning","message":{"text":"MultiLevelMergeBuilder::split_spill_file_in_half (cyclomatic 18): MultiLevelMergeBuilder::split_spill_file_in_half has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"fced24075c4efa2cb273307cee9ce335c4b8cf280a0447d5f158c998f89c56f2"}},{"ruleId":"D1","level":"warning","message":{"text":"SpillReaderStream::poll_next (cyclomatic 18): SpillReaderStream::poll_next has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/spill/mod.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"16d807997aab47bac41625175f597e5eb2e07e5abd268b369c716439dceed6ff"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_plan::projection::try_pushdown_through_join_with_column_indices (cyclomatic 18): datafusion_physical_plan::projection::try_pushdown_through_join_with_column_indices has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/projection.rs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"696af0729c44940bf58519ddfd178747fcd0530f9f43e7eecd6533d4094fd28e"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::insert_to_plan (cyclomatic 18): SqlToRel::insert_to_plan has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":2806}}}],"partialFingerprints":{"codehealthFindingId/v1":"52ed2b04ec9cf948511e224243dbd769ebbad9e8d106346e841f71a78f06ffee"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_sql::unparser::utils::date_part_to_sql (cyclomatic 18): datafusion_sql::unparser::utils::date_part_to_sql has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/utils.rs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"561ddd7d1928ba0ad63fb35945cf144872a9fac11aa46013767e65471b49a776"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_macros::user_doc::user_doc (cyclomatic 18): datafusion_macros::user_doc::user_doc has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/macros/src/user_doc.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe48379aa0bc8ee51c270e502196ccfa7e713b5d1cc308add657637385008c6f"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_expr::logical_plan::invariants::check_subquery_expr (cyclomatic 17): datafusion_expr::logical_plan::invariants::check_subquery_expr has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/invariants.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f942d443959e9f6d5311bdeaebab8dd08a9075360563480b3d011ed64d2c19c"}},{"ruleId":"D1","level":"warning","message":{"text":"ToTimestampFunc::invoke_with_args (cyclomatic 17): ToTimestampFunc::invoke_with_args has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/to_timestamp.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b68a65a22e0060fa38e23bda0ee43fd2dffb112561873aef1028ead698be84a"}},{"ruleId":"D1","level":"warning","message":{"text":"FloorFunc::preimage (cyclomatic 17): FloorFunc::preimage has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/floor.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcb38a376bf91265991cfad6cf4328332add0c0f1e50923cbcf569bd463dbed9"}},{"ruleId":"D1","level":"warning","message":{"text":"SplitPartFunc::invoke_with_args (cyclomatic 17): SplitPartFunc::invoke_with_args has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/split_part.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"44320998f383a6030ce76a596a243e8ca6d851d13ccd73acd02a40648c0fde71"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::datetime::date_trunc::general_date_trunc (cyclomatic 17): datafusion_functions::datetime::date_trunc::general_date_trunc has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: datafusion_functions::datetime::date_trunc::general_date_trunc_array_fine_granularity (cyclomatic 21) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_trunc.rs"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee4ae65a1970e7411c4565260bc3b1f8c83f768656df04cae8fe9fbeb839382e"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions_nested::set_ops::generic_set_loop (cyclomatic 17): datafusion_functions_nested::set_ops::generic_set_loop has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/set_ops.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba296f2608a11f271014707dc91b6511aa694ce6512d5d3af9c4226f5a3a3720"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_distribution::adjust_input_keys_ordering (cyclomatic 17): datafusion_physical_optimizer::ensure_requirements::enforce_distribution::adjust_input_keys_ordering has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"39942a040edb50ca4cc2569116996cd89dc2ce04e161e9374435ebce0e3ff55a"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedLoopJoinStream::process_left_range_join (cyclomatic 17): NestedLoopJoinStream::process_left_range_join has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3186}}}],"partialFingerprints":{"codehealthFindingId/v1":"774713c4d36253e7763816b15b20e66bb7b14b3a1bcc3d9d67470ab1086ef6a0"}},{"ruleId":"D1","level":"warning","message":{"text":"AsOfJoinNode::serialize (cyclomatic 17): AsOfJoinNode::serialize has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (SortMergeJoinExecNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1873}}}],"partialFingerprints":{"codehealthFindingId/v1":"b734bed9ae9b2e061fa81316f7bc35fb529cdadb1d5163aebb1af5eb83c0c499"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalAggregateExprNode::serialize (cyclomatic 17): PhysicalAggregateExprNode::serialize has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18325}}}],"partialFingerprints":{"codehealthFindingId/v1":"b63200ec19b7cbca488d3d5db3768826f96f72893a48e48d322aa8f753532172"}},{"ruleId":"D1","level":"warning","message":{"text":"SortMergeJoinExecNode::serialize (cyclomatic 17): SortMergeJoinExecNode::serialize has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (AsOfJoinNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":26833}}}],"partialFingerprints":{"codehealthFindingId/v1":"2667361692b96b91f14521c740102867f25dcf9c957ec0430506c01cb3780c38"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_pruning::pruning_predicate::build_compact_in_list_expr (cyclomatic 17): datafusion_pruning::pruning_predicate::build_compact_in_list_expr has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":1538}}}],"partialFingerprints":{"codehealthFindingId/v1":"6895b0394ca21c58d5757427957b4a15253daa670e681d2bb20c0fec41e96f03"}},{"ruleId":"D1","level":"warning","message":{"text":"SparkSha2::invoke_with_args (cyclomatic 17): SparkSha2::invoke_with_args has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/hash/sha2.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"01dd9495ead47b75e79d88d7384c3b1cc453b7d6b1df50f0f00b4d2e433b2567"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionArgs::try_new (cyclomatic 17): FunctionArgs::try_new has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"4629e1614e33853497bd260f6d4e258ba3e94f7c468f016a75de872e76ee6afe"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_substrait::physical_plan::consumer::from_substrait_rel (cyclomatic 17): datafusion_substrait::physical_plan::consumer::from_substrait_rel has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/physical_plan/consumer.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"71e2a88a6f91115c13e23268d07d77a5aec5cff4a6a690f4948d88e792b756ee"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_common::nested_struct::compact_list_view_values (cyclomatic 16): datafusion_common::nested_struct::compact_list_view_values has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/nested_struct.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"4157f7879e196449a3c9a8d6c87253a771dd22c7113478b9fb485b77db7846ad"}},{"ruleId":"D1","level":"warning","message":{"text":"ParquetOpenState::transition (cyclomatic 16): ParquetOpenState::transition has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/opener/mod.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7891fdb8bcddca25bdf17c029265272ff1022c1bc1f8bf382a0a1a3abc51bd2"}},{"ruleId":"D1","level":"warning","message":{"text":"PushdownChecker::f_down (cyclomatic 16): PushdownChecker::f_down has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/projection_read_plan.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"68567e6bd4df71c5e42f9955bdb7ecbc8808d3e761a5710d9d94a910dc7dcdf9"}},{"ruleId":"D1","level":"warning","message":{"text":"LogicalPlan::head_output_expr (cyclomatic 16): LogicalPlan::head_output_expr has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: LogicalPlan::recompute_schema (cyclomatic 28) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"41dcb399812d1d2ef1156b381f8ea4bcd92c88d8bbaa0eeba791575b5c75ecb7"}},{"ruleId":"D1","level":"warning","message":{"text":"WindowFrameStateGroups::calculate_index_of_row (cyclomatic 16): WindowFrameStateGroups::calculate_index_of_row has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/window_state.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"88cea6a53fc5292ae2df8e3957489cf52fbe9d2dc49e226a5cacb90ab527a05a"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_expr::type_coercion::functions::value_fields_with_higher_order_udf (cyclomatic 16): datafusion_expr::type_coercion::functions::value_fields_with_higher_order_udf has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: datafusion_expr::type_coercion::functions::coerced_from (cyclomatic 32) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"548d3e3d39582729e318b1b6cd148bb39e8d3edb83fc811716ea983812f3b261"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_expr::logical_plan::builder::project_with_validation (cyclomatic 16): datafusion_expr::logical_plan::builder::project_with_validation has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":2080}}}],"partialFingerprints":{"codehealthFindingId/v1":"0227b9b9483e32ff82cebaddcda07f52edd428b7cf969a14a2ed23c5b01293f5"}},{"ruleId":"D1","level":"warning","message":{"text":"FindInSetFunc::invoke_with_args (cyclomatic 16): FindInSetFunc::invoke_with_args has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/find_in_set.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0713f87ec3605612629e41b136c6c188b422d7cdcfa314119281e76749e149e"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions::math::trunc::trunc (cyclomatic 16): datafusion_functions::math::trunc::trunc has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/trunc.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"068d1c698eb4df111fbfe35ec4055653b50e9a6c4aaf4b8da3824fc7a8a445a9"}},{"ruleId":"D1","level":"warning","message":{"text":"TDigest::estimate_quantile (cyclomatic 16): TDigest::estimate_quantile has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/tdigest.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"21ffa967a76573eea5b1bc9fc1be3c42a4a7f28d2fe7c4e876b1ff68447f8854"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_functions_nested::resize::general_list_resize (cyclomatic 16): datafusion_functions_nested::resize::general_list_resize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/resize.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a581b46de8f542c5b3c2333f0d8c63fa27af69c4a2bb65dd822ce9cd25018c7"}},{"ruleId":"D1","level":"warning","message":{"text":"NthValueEvaluator::memoize (cyclomatic 16): NthValueEvaluator::memoize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-window/src/nth_value.rs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"a803d91842a790db4c6831af977426962f2dca50ddaa57408301ba8c9be86f2e"}},{"ruleId":"D1","level":"warning","message":{"text":"InListExpr::evaluate (cyclomatic 16): InListExpr::evaluate has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/in_list.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8da1aa769c456fefe408874f7116a9c51a0bb4fcc5c3225334f9430a685e187"}},{"ruleId":"D1","level":"warning","message":{"text":"ArrayMap::lookup_and_get_indices (cyclomatic 16): ArrayMap::lookup_and_get_indices has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/array_map.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"0872587c491520277fb26557ca96640211df2e48895ad368adc05a080d39437e"}},{"ruleId":"D1","level":"warning","message":{"text":"HashJoinStream::process_probe_batch (cyclomatic 16): HashJoinStream::process_probe_batch has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/stream.rs"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e31d7969653a52737dd595dfd99a968d499ae1f47df00ac82c9585f4eb175a1"}},{"ruleId":"D1","level":"warning","message":{"text":"PartitionedTopKRank::insert_batch (cyclomatic 16): PartitionedTopKRank::insert_batch has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1683}}}],"partialFingerprints":{"codehealthFindingId/v1":"047df086d514a0ae2f6d512ae9f295402233a9eb1dae2be352a6b644ac02dcc1"}},{"ruleId":"D1","level":"warning","message":{"text":"Field::deserialize (cyclomatic 16): Field::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: one other method here (ScalarTimestampValue::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: ScalarValue::serialize (cyclomatic 47) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":4273}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf2391bd15f00be9ef45fe0a640ce4b4f0a75e8cad44a56434e66a65b69d7b16"}},{"ruleId":"D1","level":"warning","message":{"text":"ScalarTimestampValue::deserialize (cyclomatic 16): ScalarTimestampValue::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: one other method here (Field::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: ScalarValue::serialize (cyclomatic 47) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":8516}}}],"partialFingerprints":{"codehealthFindingId/v1":"88f478600b49bde3a2f3979789c545ee391bc793c75b6334073c6744bb63fc2a"}},{"ruleId":"D1","level":"warning","message":{"text":"ViewTableScanNode::deserialize (cyclomatic 16): ViewTableScanNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":29302}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f1ff3788f5bf2da98e4fa94adc5f55fabb5d4071682e9ed3ef8ad837c35b915"}},{"ruleId":"D1","level":"warning","message":{"text":"CustomTableScanNode::deserialize (cyclomatic 16): CustomTableScanNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, DmlNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":5730}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8f50181e51fd62cb2875391026610934547be0eabd4fa389af041ab09915ffb"}},{"ruleId":"D1","level":"warning","message":{"text":"CreateViewNode::deserialize (cyclomatic 16): CreateViewNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CustomTableScanNode::deserialize, DmlNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":4657}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b434a08401a48093495de2696a63c3e2c8e0c52ad6f764f0e0e36453932e234"}},{"ruleId":"D1","level":"warning","message":{"text":"AnalyzeNode::deserialize (cyclomatic 16): AnalyzeNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (CreateViewNode::deserialize, CustomTableScanNode::deserialize, DmlNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1279}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d342fc98e0799317a37679c5603405b72ca383dd72cfe358161a0507de03f00"}},{"ruleId":"D1","level":"warning","message":{"text":"DmlNode::deserialize (cyclomatic 16): DmlNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":6202}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b1018c153d6972955367ec29249d16e8ac393bc7b03e8d96d38775089cff516"}},{"ruleId":"D1","level":"warning","message":{"text":"UnnestExecNode::deserialize (cyclomatic 16): UnnestExecNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":28636}}}],"partialFingerprints":{"codehealthFindingId/v1":"237f5df56a3269a6d9dbac01e19105ccce1d675f5c45dd50a9c794a7015f62a5"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalDynamicFilterNode::deserialize (cyclomatic 16): PhysicalDynamicFilterNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":19332}}}],"partialFingerprints":{"codehealthFindingId/v1":"0244a5898c268f50c67aafc716a8450ac953eb98b559fc6c2572a14b402072c7"}},{"ruleId":"D1","level":"warning","message":{"text":"PhysicalBinaryExprNode::deserialize (cyclomatic 16): PhysicalBinaryExprNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18699}}}],"partialFingerprints":{"codehealthFindingId/v1":"45719b0c23a73a6cc13d47f92926d58884f5abb6ca36872a58e8b25ffd6f0e19"}},{"ruleId":"D1","level":"warning","message":{"text":"SortExecNode::deserialize (cyclomatic 16): SortExecNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":26494}}}],"partialFingerprints":{"codehealthFindingId/v1":"91d5996af0f5e233811c87c87fc041ec79406d7689f9f544e4a8677f07dac764"}},{"ruleId":"D1","level":"warning","message":{"text":"NestedLoopJoinExecNode::deserialize (cyclomatic 16): NestedLoopJoinExecNode::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":16297}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ec3fffc207494eb3ba60bf5f7aebd4bc51a010cfd2b130d0c164c3253d450dd"}},{"ruleId":"D1","level":"warning","message":{"text":"GenerateSeriesArgsInt64::deserialize (cyclomatic 16): GenerateSeriesArgsInt64::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":8920}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e87b36fe88254b9f055fda4d10f9eff693525664fa13ed91299f42aa118c116"}},{"ruleId":"D1","level":"warning","message":{"text":"GenerateSeriesArgsDate::deserialize (cyclomatic 16): GenerateSeriesArgsDate::deserialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared. This is NOT this file\u0027s highest cyclomatic complexity: PhysicalPlanNode::serialize (cyclomatic 42) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":8748}}}],"partialFingerprints":{"codehealthFindingId/v1":"365f44368d861cba644cfb3f93599b53d0957375116d4d28097c9f6070e275a9"}},{"ruleId":"D1","level":"warning","message":{"text":"ConversionSpecifier::format_decimal (cyclomatic 16): ConversionSpecifier::format_decimal has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: TimeFormat::try_from (cyclomatic 31) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1958}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b7b66fa5adcc10f21d8ebbc1578b3d93c185ed21db8740dca6a7bf197c5dcee"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_spark::function::string::encode::encode_string (cyclomatic 16): datafusion_spark::function::string::encode::encode_string has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/encode.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ddedab249c0501e6c1ab917ce2ab502e77074bb9fc561ae7c954ccf1924c086"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::sql_compound_identifier_to_expr (cyclomatic 16): SqlToRel::sql_compound_identifier_to_expr has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/identifier.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"69e128644bee203832bee315318a24953604ea6cd5dbd782f92419054c5fb65c"}},{"ruleId":"D1","level":"warning","message":{"text":"SqlToRel::explain_to_plan (cyclomatic 16): SqlToRel::explain_to_plan has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":2113}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9c34aa755b042cd336cca8bdba6954d5c42cae7915a832e49669a1a4e090151"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::expr::subquery::from_subquery (cyclomatic 16): datafusion_substrait::logical_plan::consumer::expr::subquery::from_subquery has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/expr/subquery.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"e57621187c70766ad183815000689f196843af3d27af0d8bf97e103bca0a0445"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_cli::main_inner (cyclomatic 16): datafusion_cli::main_inner has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/main.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"af21c173725dae5c2bc8ae021ddcd0ded7d0d940bdb05a70e0a39fa7424c8802"}},{"ruleId":"D1","level":"warning","message":{"text":"datafusion_cli::exec::exec_from_repl (cyclomatic 16): datafusion_cli::exec::exec_from_repl has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/exec.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"d675bce311e2c1159a801f1154f5df151ef8de56e0bf8599f502a898c2f029fe"}},{"ruleId":"D1","level":"warning","message":{"text":"generate-changelog.generate_changelog (cyclomatic 16): generate-changelog.generate_changelog has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dev/release/generate-changelog.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3df7820998e50a77924c295e1b49d5027fda46d306fa024634d1507edebca9b"}},{"ruleId":"D2","level":"warning","message":{"text":"Unparser::select_to_sql_recursively (cognitive 268): Unparser::select_to_sql_recursively has cognitive complexity 268 (threshold 15). Drivers by points: if/else 93 (222 pts), match/switch 9 (23 pts), boolean chains 16, loops 3 (7 pts) (nesting depth added 147). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"9caf12d89eb5d5709aee3cb0aec5ebf48097f5887fd65d6f293213afb128db23"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::sql_statement_to_plan_with_context_impl (cognitive 238): SqlToRel::sql_statement_to_plan_with_context_impl has cognitive complexity 238 (threshold 15). Drivers by points: if/else 143 (179 pts), match/switch 26 (55 pts), boolean chains 4 (nesting depth added 65). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ed944291c6003ff24d92d9f43feacf4e8c8c5342127a659cf33407ec43f7a07"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultPhysicalPlanner::map_logical_node_to_physical (cognitive 194): DefaultPhysicalPlanner::map_logical_node_to_physical has cognitive complexity 194 (threshold 15). Drivers by points: if/else 60 (121 pts), match/switch 18 (47 pts), boolean chains 13, loops 5 (13 pts) (nesting depth added 98). Of this number, 190 points are the body\u0027s own statements and 4 belong to one function item inside it that branches. To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9a5e63680bb6e45f91204c0f25e81632c5a82171508d3ad5170d3463877fbaa"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::sql_function_to_expr (cognitive 191): SqlToRel::sql_function_to_expr has cognitive complexity 191 (threshold 15). Drivers by points: if/else 61 (125 pts), match/switch 13 (39 pts), loops 6 (16 pts), boolean chains 11 (nesting depth added 100). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"b05a980925729f684696408cd6fe69b76660882c00c74da27554e0a587c95e25"}},{"ruleId":"D2","level":"warning","message":{"text":"Simplifier::f_up (cognitive 172): Simplifier::f_up has cognitive complexity 172 (threshold 15). Drivers by points: if/else 42 (79 pts), boolean chains 50, match/switch 19 (37 pts), loops 3 (6 pts) (nesting depth added 58). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b622ea57c0e5be5227e68060034f942d32f6df46f4d2e69fb8b1e9a5722e898"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarValue::deserialize (cognitive 139): ScalarValue::deserialize has cognitive complexity 139 (threshold 15). Drivers by points: if/else 45 (135 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 91). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":8805}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6f920f4a1b36931288d21d3f300ec1f774a006fc9ed1678a2963cfac175b8c2"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrowType::deserialize (cognitive 127): ArrowType::deserialize has cognitive complexity 127 (threshold 15). Drivers by points: if/else 41 (123 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 83). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fcbe8d0376b97fbdd0dab8e5a76c8270fdbe9bee6fb953483368a33e03dd1bb"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalPlanNode::deserialize (cognitive 124): PhysicalPlanNode::deserialize has cognitive complexity 124 (threshold 15). Drivers by points: if/else 40 (120 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 81). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":21503}}}],"partialFingerprints":{"codehealthFindingId/v1":"77fc10c90f5895a8b7d1499191af6d52016718b0b482188513d85115feb97fa7"}},{"ruleId":"D2","level":"warning","message":{"text":"ParquetOptions::deserialize (cognitive 112): ParquetOptions::deserialize has cognitive complexity 112 (threshold 15). Drivers by points: if/else 36 (108 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 73). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":6733}}}],"partialFingerprints":{"codehealthFindingId/v1":"7934b524d7e47ce049445898e001923fd4800860fc295ea3b857aa01afc9618d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::unicode::lpad::lpad_impl (cognitive 111): datafusion_functions::unicode::lpad::lpad_impl has cognitive complexity 111 (threshold 15). Drivers by points: if/else 25 (71 pts), loops 6 (29 pts), match/switch 2 (10 pts), boolean chains 1 (nesting depth added 77). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5aa90d24b20580cb1eb863443c12bc92ed19d50cc5f7a051c3132a6f8524b4a"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::unicode::rpad::rpad_impl (cognitive 111): datafusion_functions::unicode::rpad::rpad_impl has cognitive complexity 111 (threshold 15). Drivers by points: if/else 25 (71 pts), loops 6 (29 pts), match/switch 2 (10 pts), boolean chains 1 (nesting depth added 77). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/rpad.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f3fae0e41b89bf1d231f355c32c6a68e1494d3152ea8f533d9299a72dc949ac"}},{"ruleId":"D2","level":"warning","message":{"text":"PushDownFilter::rewrite (cognitive 110): PushDownFilter::rewrite has cognitive complexity 110 (threshold 15). Drivers by points: if/else 37 (71 pts), loops 12 (28 pts), boolean chains 6, match/switch 3 (5 pts) (nesting depth added 52). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdf2d947f0ea030deb8e9b2093f0f4a1110b5b9841895ddc2cba08478519c6b2"}},{"ruleId":"D2","level":"warning","message":{"text":"LogicalExprNode::deserialize (cognitive 109): LogicalExprNode::deserialize has cognitive complexity 109 (threshold 15). Drivers by points: if/else 35 (105 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 71). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":13691}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd2d693f4eefdb4d5fa5b06bf71b62ebe81741e3fbc3b437a79ab016534d614c"}},{"ruleId":"D2","level":"warning","message":{"text":"LogicalPlanNode::deserialize (cognitive 106): LogicalPlanNode::deserialize has cognitive complexity 106 (threshold 15). Drivers by points: if/else 34 (102 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 69). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":14451}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b538e8a2c551097c3a3362b851f03a0ad48baccfda6fe04d87fbc2a3c788675"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr::type_coercion::functions::get_valid_types (cognitive 103): datafusion_expr::type_coercion::functions::get_valid_types has cognitive complexity 103 (threshold 15). Drivers by points: if/else 40 (72 pts), match/switch 11 (20 pts), loops 6 (11 pts) (nesting depth added 46). Of this number, 63 points are the body\u0027s own statements and 40 belong to 8 function items inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de088c7f8e8a728eb67fb2df72a932e5353ffe5ff626c06ab0d2f365e0c923d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::windows::window_equivalence_properties (cognitive 102): datafusion_physical_plan::windows::window_equivalence_properties has cognitive complexity 102 (threshold 15). Drivers by points: if/else 22 (70 pts), loops 6 (23 pts), boolean chains 9 (nesting depth added 65). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/mod.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"627c4fd0926405d2b6f35f0a0e97340aa70e4f21b3dd8b7f69b25488282e22bb"}},{"ruleId":"D2","level":"warning","message":{"text":"ParquetOptions::serialize (cognitive 98): ParquetOptions::serialize has cognitive complexity 98 (threshold 15). Drivers by points: if/else 72, match/switch 13 (26 pts) (nesting depth added 13). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":6425}}}],"partialFingerprints":{"codehealthFindingId/v1":"71f21d8c5b2e54561cf27aa4441fc8996c228af13b8755685c06800d217356f8"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalExprNode::deserialize (cognitive 85): PhysicalExprNode::deserialize has cognitive complexity 85 (threshold 15). Drivers by points: if/else 27 (81 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 55). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":19559}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1f47c08128fe619235b08f03b87f9b0bf1d79775d861d2b2e19f0ab722e46c0"}},{"ruleId":"D2","level":"warning","message":{"text":"ConversionSpecifier::format_hex_float (cognitive 84): ConversionSpecifier::format_hex_float has cognitive complexity 84 (threshold 15). Drivers by points: if/else 38 (68 pts), boolean chains 8, loops 3 (6 pts), match/switch 2 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1432}}}],"partialFingerprints":{"codehealthFindingId/v1":"430e9eadb7bc3b34f8edaa97bfcc25776d83609edb54efbac41957f1f288d3d7"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::expr::literal::from_substrait_literal (cognitive 84): datafusion_substrait::logical_plan::consumer::expr::literal::from_substrait_literal has cognitive complexity 84 (threshold 15). Drivers by points: match/switch 24 (43 pts), if/else 14 (38 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 44). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/expr/literal.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"35789e023de46e32b53635cb4c47e2957efa063faa06a9766fc85eb76c7e1a82"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarValue::iter_to_array (cognitive 81): ScalarValue::iter_to_array has cognitive complexity 81 (threshold 15). Drivers by points: if/else 33 (53 pts), match/switch 12 (22 pts), loops 2 (5 pts), boolean chains 1 (nesting depth added 33). Of this number, 69 points are the body\u0027s own statements and 12 belong to one function item inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":2821}}}],"partialFingerprints":{"codehealthFindingId/v1":"af67b9a2990072db3bae56b5835dce8190510040c3e48933648dd155a83c067b"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::math::width_bucket::width_bucket_interval_mdn_exact (cognitive 73): datafusion_spark::function::math::width_bucket::width_bucket_interval_mdn_exact has cognitive complexity 73 (threshold 15). Drivers by points: if/else 23 (68 pts), boolean chains 4, loops 1 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/width_bucket.rs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b2b30faa9e5a5a9308ff0191fedfe9cd2b2ecf8c351ad2e119a6d2423608163"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvOptions::deserialize (cognitive 70): CsvOptions::deserialize has cognitive complexity 70 (threshold 15). Drivers by points: if/else 22 (66 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":1841}}}],"partialFingerprints":{"codehealthFindingId/v1":"040bb4d83e5a777160691312b5b3387000a42fcdf30ad3fa9373f70cee00e851"}},{"ruleId":"D2","level":"warning","message":{"text":"LogicalPlanNode::try_into_logical_plan (cognitive 69): LogicalPlanNode::try_into_logical_plan has cognitive complexity 69 (threshold 15). Drivers by points: if/else 25 (44 pts), match/switch 9 (17 pts), loops 4 (8 pts) (nesting depth added 31). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/mod.rs"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"98570c4d3e5ae18211206c7c4d9c4760ea78c6f3103039b320492fddf841b10b"}},{"ruleId":"D2","level":"warning","message":{"text":"PullUpCorrelatedExpr::f_up (cognitive 67): PullUpCorrelatedExpr::f_up has cognitive complexity 67 (threshold 15). Drivers by points: if/else 25 (50 pts), match/switch 4 (8 pts), boolean chains 5, loops 2 (4 pts) (nesting depth added 31). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"3277b0933694ef556948e200ad0c504dc955cb8086884f8bf0193a01c238ec37"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupedHashAggregateStream::poll_next (cognitive 67): GroupedHashAggregateStream::poll_next has cognitive complexity 67 (threshold 15). Drivers by points: if/else 16 (54 pts), match/switch 3 (8 pts), boolean chains 4, loops 1 (nesting depth added 43). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"fadaee85d136a95e55370d87ab686036a0f145dc4d3265f8511f59bc0827a42a"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_distribution::ensure_distribution_with_stats (cognitive 66): datafusion_physical_optimizer::ensure_requirements::enforce_distribution::ensure_distribution_with_stats has cognitive complexity 66 (threshold 15). Drivers by points: if/else 21 (36 pts), boolean chains 20, match/switch 4 (10 pts) (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":1363}}}],"partialFingerprints":{"codehealthFindingId/v1":"500e06b46a36dd2adc75b3757909beb58e9d6aca37546e14a7dc278fe0050792"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeRenderVisitor::render_box_content (cognitive 65): TreeRenderVisitor::render_box_content has cognitive complexity 65 (threshold 15). Drivers by points: if/else 21 (53 pts), loops 4 (7 pts), boolean chains 5 (nesting depth added 35). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":1072}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d5e33409602dad803d068c2669dccb3c4f3e1fc2e9793cbff59a3e520516d9d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_distribution::enforce_distribution_relationships (cognitive 63): datafusion_physical_optimizer::ensure_requirements::enforce_distribution::enforce_distribution_relationships has cognitive complexity 63 (threshold 15). Drivers by points: if/else 19 (44 pts), match/switch 3 (9 pts), boolean chains 5, loops 3 (5 pts) (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":1122}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdf5470566254e5b10c608707228276219587a5d4ddced2fd8cc946b72405495"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion::bin::print_functions_docs::print_docs (cognitive 57): datafusion::bin::print_functions_docs::print_docs has cognitive complexity 57 (threshold 15). Drivers by points: if/else 15 (33 pts), loops 8 (23 pts), boolean chains 1 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/bin/print_functions_docs.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b75188926f74e3b7d63d701a9c62e640eca2c39eb0fb37391544a24c3c16f0e"}},{"ruleId":"D2","level":"warning","message":{"text":"LogicalPlan::display (cognitive 57): LogicalPlan::display has cognitive complexity 57 (threshold 15). Drivers by points: if/else 17 (34 pts), match/switch 8 (17 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":2068}}}],"partialFingerprints":{"codehealthFindingId/v1":"07569a5c84efb6db1c3dbab1aaae20034d152f27162ef0154a058e961020eec6"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_datasource::write::demux::compute_partition_keys_by_row (cognitive 56): datafusion_datasource::write::demux::compute_partition_keys_by_row has cognitive complexity 56 (threshold 15). Drivers by points: loops 18 (52 pts), if/else 1 (2 pts), match/switch 1 (2 pts) (nesting depth added 36). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/write/demux.rs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fb001e9068378cf2699778b0ebfbd027b6712043d43c1665e7ab4f7eec168c9"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvWriterOptions::deserialize (cognitive 55): CsvWriterOptions::deserialize has cognitive complexity 55 (threshold 15). Drivers by points: if/else 17 (51 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":2384}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b71377cd54f6f7c3e06ab90a276fcb1ba23186dc6f07c95eab8b52199ac50ba"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::types::from_substrait_type (cognitive 55): datafusion_substrait::logical_plan::consumer::types::from_substrait_type has cognitive complexity 55 (threshold 15). Drivers by points: match/switch 18 (48 pts), if/else 3 (7 pts) (nesting depth added 34). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/types.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"a248faafabe37a95dc7cc3691dc0e76912b9df57695c93bb28afcc5772619fd8"}},{"ruleId":"D2","level":"warning","message":{"text":"AlignedBoundaryStream::poll_next (cognitive 53): AlignedBoundaryStream::poll_next has cognitive complexity 53 (threshold 15). Drivers by points: if/else 12 (40 pts), match/switch 4 (12 pts), loops 1 (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/boundary_stream.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc6b0dbf428f4cabc08740b092015ba93a23edb7ac691b487f1dfd308036d0ee"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::hash_join::exec::collect_left_input (cognitive 52): datafusion_physical_plan::joins::hash_join::exec::collect_left_input has cognitive complexity 52 (threshold 15). Drivers by points: if/else 30 (39 pts), boolean chains 6, loops 3 (6 pts), match/switch 1 (nesting depth added 12). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":3027}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f41be68d6c23154dd9864c97c4cf3ee64881dffe4e14f5139eaa9780238158c"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionStateBuilder::build (cognitive 51): SessionStateBuilder::build has cognitive complexity 51 (threshold 15). Drivers by points: if/else 15 (25 pts), loops 8 (16 pts), match/switch 3 (10 pts) (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"0042de0cae1c38f055e326a0c5ee655bf5c3fa3fb6936a4f06fa0417a7d88fdb"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarSubqueryToJoin::rewrite (cognitive 49): ScalarSubqueryToJoin::rewrite has cognitive complexity 49 (threshold 15). Drivers by points: if/else 14 (36 pts), loops 5 (11 pts), boolean chains 1, match/switch 1 (nesting depth added 28). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/scalar_subquery_to_join.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"23d51cca1fdbb529d8f2fcb86615b443390a0ad15694d5dd40a2320b3af59e99"}},{"ruleId":"D2","level":"warning","message":{"text":"CreateExternalTableNode::deserialize (cognitive 49): CreateExternalTableNode::deserialize has cognitive complexity 49 (threshold 15). Drivers by points: if/else 15 (45 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":4378}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5a477e576936ad8ac5cf2f93309aba89ca363a9500f89a1517d64c845fb5442"}},{"ruleId":"D2","level":"warning","message":{"text":"ConversionSpecifier::format_float (cognitive 49): ConversionSpecifier::format_float has cognitive complexity 49 (threshold 15). Drivers by points: if/else 22 (41 pts), match/switch 3 (6 pts), boolean chains 2 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1691}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bd186cb7ffedbd3f71992bdf39b773150c86852312a328e54ae48d12a420ec0"}},{"ruleId":"D2","level":"warning","message":{"text":"PagePruningAccessPlanFilter::prune_plan_with_page_index_and_metrics (cognitive 48): PagePruningAccessPlanFilter::prune_plan_with_page_index_and_metrics has cognitive complexity 48 (threshold 15). Drivers by points: if/else 17 (34 pts), loops 3 (6 pts), boolean chains 4, match/switch 1 (4 pts) (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/page_filter.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"c27a97e13bca9b5d4a121a8cf6610842c4f7406410f0cc99694635988735f8bc"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_cli::exec::exec_from_repl (cognitive 48): datafusion_cli::exec::exec_from_repl has cognitive complexity 48 (threshold 15). Drivers by points: if/else 8 (29 pts), match/switch 4 (15 pts), loops 2 (4 pts) (nesting depth added 34). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/exec.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"351e32b8ce541a74d246766857dcd482ccff990f3ebba9a587ba5a5fce34e9aa"}},{"ruleId":"D2","level":"warning","message":{"text":"ConcatWsFunc::invoke_with_args (cognitive 47): ConcatWsFunc::invoke_with_args has cognitive complexity 47 (threshold 15). Drivers by points: match/switch 8 (22 pts), if/else 9 (18 pts), loops 3 (7 pts) (nesting depth added 27). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat_ws.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"d88872d9ceed203c56bd0d27b3ef6e8e507d4416fbb24e68c1b64f9e89928c74"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::string::compute_array_to_string (cognitive 47): datafusion_functions_nested::string::compute_array_to_string has cognitive complexity 47 (threshold 15). Drivers by points: if/else 18 (37 pts), loops 4 (7 pts), match/switch 2 (3 pts) (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5a8ed7f3e37f8807babd063846eeae2ebde29b5e941e304493f169fad3657b6"}},{"ruleId":"D2","level":"warning","message":{"text":"ListingTableFactory::create_inner (cognitive 46): ListingTableFactory::create_inner has cognitive complexity 46 (threshold 15). Drivers by points: if/else 14 (22 pts), match/switch 5 (15 pts), loops 4 (7 pts), boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/listing_table_factory.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f3940ce5f71c789f5634d88bdfe41a1585516d56b56d2ef6c559d0390d7017a"}},{"ruleId":"D2","level":"warning","message":{"text":"FileScanExecConf::deserialize (cognitive 46): FileScanExecConf::deserialize has cognitive complexity 46 (threshold 15). Drivers by points: if/else 14 (42 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (AggregateExecNode::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":7732}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ef859406183a7b2565629d23ffba4da51b0a481bbbf387a332a9e86672ac003"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateExecNode::deserialize (cognitive 46): AggregateExecNode::deserialize has cognitive complexity 46 (threshold 15). Drivers by points: if/else 14 (42 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (FileScanExecConf::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f5966718c104a015749dde183f236fc7e328719271ba12aedeea80719c4831d"}},{"ruleId":"D2","level":"warning","message":{"text":"Unparser::unparse_table_scan_pushdown (cognitive 46): Unparser::unparse_table_scan_pushdown has cognitive complexity 46 (threshold 15). Drivers by points: if/else 20 (39 pts), boolean chains 6, match/switch 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":2515}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4597fa4f629f4f939e6024d137ba1130254fdb7a7e8cfa48fa2abbe2e0af703"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarValue::to_array_of_size (cognitive 45): ScalarValue::to_array_of_size has cognitive complexity 45 (threshold 15). Drivers by points: match/switch 14 (23 pts), if/else 9 (19 pts), loops 1 (3 pts) (nesting depth added 21). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":3463}}}],"partialFingerprints":{"codehealthFindingId/v1":"21eeea08f1003aba86b0978d0b5390923d3cca9c943230d3721d801544211281"}},{"ruleId":"D2","level":"warning","message":{"text":"Expr::fmt (cognitive 45): Expr::fmt has cognitive complexity 45 (threshold 15). Drivers by points: if/else 18 (29 pts), match/switch 7 (14 pts), loops 1 (2 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3559}}}],"partialFingerprints":{"codehealthFindingId/v1":"a37857efd19aebb23bd938dc559ba5e42d969ac38695a994e76f701599a3d543"}},{"ruleId":"D2","level":"warning","message":{"text":"Unparser::expr_to_sql_inner (cognitive 45): Unparser::expr_to_sql_inner has cognitive complexity 45 (threshold 15). Drivers by points: if/else 16 (27 pts), match/switch 9 (17 pts), boolean chains 1 (nesting depth added 19). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b05665064d6df067ab3ffa81dccd4df514af642f2cdee5257e9ed56c600957b"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_requirement_to_children (cognitive 44): datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_requirement_to_children has cognitive complexity 44 (threshold 15). Drivers by points: if/else 23 (33 pts), match/switch 3 (7 pts), boolean chains 4 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc93750cd5595c721466699698f7e29915cf14af784904b82c6fa8523d56e67b"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvOptions::serialize (cognitive 44): CsvOptions::serialize has cognitive complexity 44 (threshold 15). Drivers by points: if/else 44. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":1669}}}],"partialFingerprints":{"codehealthFindingId/v1":"a884d212d8e136ca27e347180373067de71f43cf908dcdaf43c3c9807b931120"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::regex::regexpcount::regexp_count_inner (cognitive 43): datafusion_functions::regex::regexpcount::regexp_count_inner has cognitive complexity 43 (threshold 15). Drivers by points: if/else 19 (35 pts), boolean chains 7, match/switch 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"686decbcc1aeec828890191950127573ec7cd4dcc94e29de6bff61d42fc3ab5e"}},{"ruleId":"D2","level":"warning","message":{"text":"ListingTableScanNode::deserialize (cognitive 43): ListingTableScanNode::deserialize has cognitive complexity 43 (threshold 15). Drivers by points: if/else 13 (39 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (PlanType::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":13142}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef43a60f21ce43106fa99254020edfcb0d0fe2e32586c1bab11679f099d6a1c3"}},{"ruleId":"D2","level":"warning","message":{"text":"PlanType::deserialize (cognitive 43): PlanType::deserialize has cognitive complexity 43 (threshold 15). Drivers by points: if/else 13 (39 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (ListingTableScanNode::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23970}}}],"partialFingerprints":{"codehealthFindingId/v1":"b81a226178f0ef273bb8e33238736ecc53934c9509b0e1e33c6884e38966ed52"}},{"ruleId":"D2","level":"warning","message":{"text":"ConversionSpecifier::format (cognitive 43): ConversionSpecifier::format has cognitive complexity 43 (threshold 15). Drivers by points: match/switch 20 (37 pts), if/else 4 (6 pts) (nesting depth added 19). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":996}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb455160b4b4765eb8002d775cdc4763839b35c598cf516030e7e26345cbd3d5"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_expr::planner::create_physical_expr (cognitive 42): datafusion_physical_expr::planner::create_physical_expr has cognitive complexity 42 (threshold 15). Drivers by points: if/else 15 (26 pts), match/switch 8 (16 pts) (nesting depth added 19). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/planner.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7b4076340acf0245bee919f7bb97f274705b3f07d41b62c520f1cbc19a1e3fd"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_expr::expressions::binary::check_short_circuit (cognitive 42): datafusion_physical_expr::expressions::binary::check_short_circuit has cognitive complexity 42 (threshold 15). Drivers by points: if/else 15 (37 pts), boolean chains 3, match/switch 2 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":1260}}}],"partialFingerprints":{"codehealthFindingId/v1":"985d9a7b4157dbacc9036cbc7061cce3595bd26815c2b01585e6b9dcfbeda806"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterializingSortMergeJoinStream::freeze_streamed_matched (cognitive 42): MaterializingSortMergeJoinStream::freeze_streamed_matched has cognitive complexity 42 (threshold 15). Drivers by points: if/else 15 (27 pts), loops 2 (9 pts), match/switch 1 (6 pts) (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":1547}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4a10ddf14361c839cf06547c710e63d96732febdbd091b9e2aefbea85e46228"}},{"ruleId":"D2","level":"warning","message":{"text":"SchemaDisplay::fmt (cognitive 41): SchemaDisplay::fmt has cognitive complexity 41 (threshold 15). Drivers by points: if/else 15 (26 pts), match/switch 6 (11 pts), loops 2 (4 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3006}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d199f4f217143e430cff93e5a38e0651559d85f38f8cc5356bb589513533d0"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::set_ops::generic_set_loop (cognitive 41): datafusion_functions_nested::set_ops::generic_set_loop has cognitive complexity 41 (threshold 15). Drivers by points: if/else 13 (26 pts), loops 5 (13 pts), boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/set_ops.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f0eaaaeefc2995f7879f0bb05e3184790d8f8423f73a29064453a0e5a700a50"}},{"ruleId":"D2","level":"warning","message":{"text":"SpillReaderStream::poll_next (cognitive 41): SpillReaderStream::poll_next has cognitive complexity 41 (threshold 15). Drivers by points: if/else 10 (32 pts), match/switch 3 (8 pts), loops 1 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/spill/mod.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"88fae1d9353bbed48fa50d8d47e6dcf5165908da097702ad719e086f6ec87360"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::datetime::common::handle_multiple (cognitive 40): datafusion_functions::datetime::common::handle_multiple has cognitive complexity 40 (threshold 15). Drivers by points: match/switch 8 (23 pts), if/else 3 (11 pts), loops 2 (6 pts) (nesting depth added 27). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/common.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"e85ef90506654489a5607f10b35e202ef57b261d742de16d13ebf695f67cdd1a"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr::logical_plan::builder::project_with_validation (cognitive 39): datafusion_expr::logical_plan::builder::project_with_validation has cognitive complexity 39 (threshold 15). Drivers by points: if/else 13 (27 pts), loops 4 (9 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":2080}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e8426baa629fca27781afa5c0715ccb6b2b63a6bdc712c179bb05c0e5c1ede0"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_sorts_helper (cognitive 39): datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_sorts_helper has cognitive complexity 39 (threshold 15). Drivers by points: if/else 21 (31 pts), loops 3 (6 pts), boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f9806b3a5b30a005de0ed0dd317319050c08838b4cb17590d4ba490152f1a77"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::expr_source_side (cognitive 39): datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::expr_source_side has cognitive complexity 39 (threshold 15). Drivers by points: if/else 9 (26 pts), loops 3 (11 pts), boolean chains 1, match/switch 1 (nesting depth added 25). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":894}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c22b04abd188994f251d82f1babe7c739edebcaee714e2d97ff58999755a101"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::aggregates::get_finer_aggregate_exprs_requirement (cognitive 39): datafusion_physical_plan::aggregates::get_finer_aggregate_exprs_requirement has cognitive complexity 39 (threshold 15). Drivers by points: if/else 13 (36 pts), loops 2 (3 pts) (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2972}}}],"partialFingerprints":{"codehealthFindingId/v1":"d04353f628780ef34c6bb1d74a44bad32eba9dc967de0ef6af0b9a44e14b83c3"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::sql_compound_identifier_to_expr (cognitive 39): SqlToRel::sql_compound_identifier_to_expr has cognitive complexity 39 (threshold 15). Drivers by points: if/else 7 (17 pts), match/switch 3 (12 pts), loops 2 (7 pts), boolean chains 3 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/identifier.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"858ac1f5ad599f2e7a3e675c91a7d48a52cfca1d2c5e77036e5c4f737061b754"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultPhysicalPlanner::handle_explain (cognitive 38): DefaultPhysicalPlanner::handle_explain has cognitive complexity 38 (threshold 15). Drivers by points: if/else 11 (31 pts), match/switch 3 (6 pts), boolean chains 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":2860}}}],"partialFingerprints":{"codehealthFindingId/v1":"55be7fad45c6afb51e9d265622ed481a5633ccc9b0487acb55391bd23b561439"}},{"ruleId":"D2","level":"warning","message":{"text":"ScanState::poll_scan (cognitive 38): ScanState::poll_scan has cognitive complexity 38 (threshold 15). Drivers by points: if/else 12 (22 pts), match/switch 9 (16 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_stream/scan_state.rs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"412ba4c83b28588c7f94435c4ff91787e7c90cec7c01a09812ce098f71afe8a1"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr::logical_plan::invariants::check_subquery_expr (cognitive 38): datafusion_expr::logical_plan::invariants::check_subquery_expr has cognitive complexity 38 (threshold 15). Drivers by points: if/else 13 (28 pts), match/switch 3 (8 pts), boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/invariants.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb2718ad6d89ea73e3673d9be179219aa8b931fa44c08f083ef247e9737163ac"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::limit_pushdown::pushdown_limit_helper (cognitive 38): datafusion_physical_optimizer::limit_pushdown::pushdown_limit_helper has cognitive complexity 38 (threshold 15). Drivers by points: if/else 22 (36 pts), boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/limit_pushdown.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"605466b022b18b55fa94b8a58d24487654814c559952864039000cf46d4a38fb"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_pruning::pruning_predicate::build_predicate_expression (cognitive 38): datafusion_pruning::pruning_predicate::build_predicate_expression has cognitive complexity 38 (threshold 15). Drivers by points: if/else 20 (28 pts), boolean chains 5, match/switch 3 (5 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":1732}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee3bda34614b504097f01acadfcac2da564890e631ad86f27b683477d063f70e"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::map::str_to_map::str_to_map_impl (cognitive 38): datafusion_spark::function::map::str_to_map::str_to_map_impl has cognitive complexity 38 (threshold 15). Drivers by points: if/else 7 (19 pts), loops 4 (10 pts), match/switch 3 (9 pts) (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/map/str_to_map.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"697de19149caf68f0d27d54c1fc6163fb330821dec37806a57c3eb2e27b4fcf8"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonOpener::open (cognitive 37): JsonOpener::open has cognitive complexity 37 (threshold 15). Drivers by points: if/else 9 (21 pts), match/switch 3 (8 pts), loops 2 (7 pts), boolean chains 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-json/src/source.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"16687f3315f283f8a8ed534058887536bca6284910c705142e42fff79d6ba86f"}},{"ruleId":"D2","level":"warning","message":{"text":"PgJsonVisitor::to_json_value (cognitive 37): PgJsonVisitor::to_json_value has cognitive complexity 37 (threshold 15). Drivers by points: if/else 14 (28 pts), match/switch 4 (9 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/display.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"c87252740692901d665f3bbbcc025d76fdd3cef20cb422899a90958a8544b7af"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr::higher_order_function::resolve_higher_order_function (cognitive 37): datafusion_expr::higher_order_function::resolve_higher_order_function has cognitive complexity 37 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 4 (12 pts), match/switch 5 (9 pts), boolean chains 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6fdfdfcaae98be0214a55771c7744f3890035f372977e3fc62f74ea6c8c87d7"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::decorrelate_lateral_join::rewrite_internal (cognitive 37): datafusion_optimizer::decorrelate_lateral_join::rewrite_internal has cognitive complexity 37 (threshold 15). Drivers by points: if/else 23 (29 pts), boolean chains 4, loops 2 (4 pts) (nesting depth added 8). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate_lateral_join.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"912b48aaae8316527a361f864c65a1186aef97bae2826a7f057aa8e88567054c"}},{"ruleId":"D2","level":"warning","message":{"text":"HashJoinExecNode::deserialize (cognitive 37): HashJoinExecNode::deserialize has cognitive complexity 37 (threshold 15). Drivers by points: if/else 11 (33 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9804}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d6ab1bb46b4b555f9e99ad2e100e786f1eaa782bb2bfef64d8034ac01b520c4"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::url::url_decode::spark_handled_url_decode (cognitive 37): datafusion_spark::function::url::url_decode::spark_handled_url_decode has cognitive complexity 37 (threshold 15). Drivers by points: match/switch 9 (18 pts), if/else 5 (12 pts), loops 4 (7 pts) (nesting depth added 19). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/url/url_decode.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"abc21e0c7addbbb326b7c13704d5affe16c6752a7ced3832689f71f160c09fa8"}},{"ruleId":"D2","level":"warning","message":{"text":"Expr::normalize_eq (cognitive 36): Expr::normalize_eq has cognitive complexity 36 (threshold 15). Drivers by points: boolean chains 22, match/switch 5 (9 pts), if/else 3 (5 pts) (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":2365}}}],"partialFingerprints":{"codehealthFindingId/v1":"9355d638f82ea7115908a44d4aa251c74ea657b28f0c3bdded72af236049a0dd"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::arrays_zip::try_perfect_list_zip (cognitive 36): datafusion_functions_nested::arrays_zip::try_perfect_list_zip has cognitive complexity 36 (threshold 15). Drivers by points: if/else 10 (24 pts), loops 4 (9 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 20). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/arrays_zip.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"78640d5d53f8b41b671828c53092789ff1b137ce5885c302b6c00ccf5b20dd34"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::math::round::spark_round (cognitive 36): datafusion_spark::function::math::round::spark_round has cognitive complexity 36 (threshold 15). Drivers by points: if/else 16 (30 pts), match/switch 3 (5 pts), boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/round.rs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb47132ae447478a5bd80919bf8ef5a746fc5dc91b8e46783ff06e0004cda183"}},{"ruleId":"D2","level":"warning","message":{"text":"ColumnarValueRef::from_columnar_value (cognitive 35): ColumnarValueRef::from_columnar_value has cognitive complexity 35 (threshold 15). Drivers by points: if/else 16 (30 pts), match/switch 3 (5 pts) (nesting depth added 16). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/strings.rs"},"region":{"startLine":1280}}}],"partialFingerprints":{"codehealthFindingId/v1":"151f55457dd3b7a16841e119b28d648c0299b4fffd11690d80cb9b261d68f0c0"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowShiftEvaluator::evaluate (cognitive 35): WindowShiftEvaluator::evaluate has cognitive complexity 35 (threshold 15). Drivers by points: if/else 17 (29 pts), boolean chains 4, loops 1 (2 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-window/src/lead_lag.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a9f3f494db62bde3801df4510c07c669db647a15f40737c28c9b3450fee1c79"}},{"ruleId":"D2","level":"warning","message":{"text":"BinaryExpr::propagate_constraints (cognitive 35): BinaryExpr::propagate_constraints has cognitive complexity 35 (threshold 15). Drivers by points: if/else 18 (25 pts), boolean chains 10 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":728}}}],"partialFingerprints":{"codehealthFindingId/v1":"3968839d0325e09566900ce243b67f1544554629a290c035d7f595a5c55abcc0"}},{"ruleId":"D2","level":"warning","message":{"text":"InListExpr::evaluate (cognitive 35): InListExpr::evaluate has cognitive complexity 35 (threshold 15). Drivers by points: if/else 14 (26 pts), match/switch 3 (5 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/in_list.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd84a6b3f7ae6dd751e5e6b4d96fe1b8a7866e46b89b80e6e123f093225a55ff"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::nested_loop_join::build_unmatched_batch (cognitive 35): datafusion_physical_plan::joins::nested_loop_join::build_unmatched_batch has cognitive complexity 35 (threshold 15). Drivers by points: if/else 15 (26 pts), match/switch 2 (5 pts), loops 2 (4 pts) (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3879}}}],"partialFingerprints":{"codehealthFindingId/v1":"63a101dcd4daea9bcbaceba1427f1996c66fc541eb1af2281dae7b207d1257c4"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_substrait::physical_plan::consumer::from_substrait_rel (cognitive 35): datafusion_substrait::physical_plan::consumer::from_substrait_rel has cognitive complexity 35 (threshold 15). Drivers by points: if/else 7 (16 pts), match/switch 4 (10 pts), loops 2 (7 pts), boolean chains 2 (nesting depth added 20). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/physical_plan/consumer.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"4436b8974794bcb9f6c6def1fac19a431183463c51291672aab806ee683738c2"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::rel::read_rel::from_read_rel (cognitive 35): datafusion_substrait::logical_plan::consumer::rel::read_rel::from_read_rel has cognitive complexity 35 (threshold 15). Drivers by points: if/else 9 (17 pts), match/switch 5 (10 pts), loops 2 (5 pts), boolean chains 3 (nesting depth added 16). Of this number, 28 points are the body\u0027s own statements and 7 belong to 2 function items inside it that branch. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/rel/read_rel.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"f03a2131ddc6651c41060b1e93174e9639e84d9d1ab30b1472743f1f93577891"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::unicode::substrindex::substr_index_scalar_view (cognitive 34): datafusion_functions::unicode::substrindex::substr_index_scalar_view has cognitive complexity 34 (threshold 15). Drivers by points: if/else 12 (23 pts), loops 4 (10 pts), boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/substrindex.rs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"70a2e0b2916d926f2e3368ae0a8e1fba946a048a637a12fda114536a6e1a5c36"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::optimize_projections::optimize_projections (cognitive 34): datafusion_optimizer::optimize_projections::optimize_projections has cognitive complexity 34 (threshold 15). Drivers by points: if/else 16 (25 pts), match/switch 4 (6 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/optimize_projections/mod.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"7af53c4d3d8bde0b6949e54efea2fccf2de8c6577b6d646b3e5c4b6365923c20"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayMap::lookup_and_get_indices (cognitive 34): ArrayMap::lookup_and_get_indices has cognitive complexity 34 (threshold 15). Drivers by points: if/else 10 (26 pts), loops 2 (4 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/array_map.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcdc4eec3b292041ea68f10d0d92e2f4fc09ae08ef730c74d255140576ab343f"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::piecewise_merge_join::classic_join::resolve_classic_join (cognitive 34): datafusion_physical_plan::joins::piecewise_merge_join::classic_join::resolve_classic_join has cognitive complexity 34 (threshold 15). Drivers by points: if/else 8 (24 pts), loops 3 (6 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"6270c71600cd53b1fe303b59428a321ee757f471daf7313506abcdf452b294c7"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvWriterOptions::serialize (cognitive 34): CsvWriterOptions::serialize has cognitive complexity 34 (threshold 15). Drivers by points: if/else 34. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":2264}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba0c642f13eff9935e2983af78a95be7e160e3434bb5b8cab07df6e7a840ed11"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvOptions::try_from (cognitive 34): CsvOptions::try_from has cognitive complexity 34 (threshold 15). Drivers by points: if/else 32, match/switch 2. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/from_proto.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"99c3b7d3f6697fb859cfa8568d2af4da8278fcefcc2d750943f1c80256159419"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowExprNode::deserialize (cognitive 34): WindowExprNode::deserialize has cognitive complexity 34 (threshold 15). Drivers by points: if/else 10 (30 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (PhysicalWindowExprNode::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":29874}}}],"partialFingerprints":{"codehealthFindingId/v1":"86c50847c21d5bfbdc367a3bbe187e394ff6dae23769a353ee97395b7e7deb5c"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalWindowExprNode::deserialize (cognitive 34): PhysicalWindowExprNode::deserialize has cognitive complexity 34 (threshold 15). Drivers by points: if/else 10 (30 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (WindowExprNode::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23275}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bf0864f7fe471ed2e5b1a6e6a185f90a563aa77133e585b3989ccb7343b16fc"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::merge_clause_to_plan (cognitive 34): SqlToRel::merge_clause_to_plan has cognitive complexity 34 (threshold 15). Drivers by points: if/else 9 (22 pts), match/switch 5 (8 pts), loops 2 (4 pts) (nesting depth added 18). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":2664}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d58a8d458f11fd7b4896b32a9e98fc675c6fa355aa21695e0c617c80b38bdcf"}},{"ruleId":"D2","level":"warning","message":{"text":"RoundFunc::invoke_with_args (cognitive 33): RoundFunc::invoke_with_args has cognitive complexity 33 (threshold 15). Drivers by points: if/else 16 (26 pts), boolean chains 5, match/switch 1 (2 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"54773a4660216d1e8450dc1404e412368d267f25daab38bf24385896861f5d12"}},{"ruleId":"D2","level":"warning","message":{"text":"PartialSortStream::poll_next_inner (cognitive 33): PartialSortStream::poll_next_inner has cognitive complexity 33 (threshold 15). Drivers by points: if/else 12 (29 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/partial_sort.rs"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d7ee27a2a823aac7c01a5053425bf379e4353d93c3314371e109fd86dde57d9"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionedTopKRank::insert_batch (cognitive 33): PartitionedTopKRank::insert_batch has cognitive complexity 33 (threshold 15). Drivers by points: if/else 11 (25 pts), loops 3 (4 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1683}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b61b1e4b38aa83e8ee7370d5550af370337451ef42aa3074592c022f854c06d"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionedTopKDenseRank::insert_batch (cognitive 33): PartitionedTopKDenseRank::insert_batch has cognitive complexity 33 (threshold 15). Drivers by points: if/else 10 (23 pts), loops 5 (10 pts) (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":2180}}}],"partialFingerprints":{"codehealthFindingId/v1":"92c949bc4faca823bc5fdc1db0b6e3d4e3790924111ddebac4aebf6fafd0eb7b"}},{"ruleId":"D2","level":"warning","message":{"text":"DFParser::parse_create_external_table (cognitive 33): DFParser::parse_create_external_table has cognitive complexity 33 (threshold 15). Drivers by points: if/else 13 (26 pts), boolean chains 3, match/switch 1 (3 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":1207}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7eaf5ba3d22f63f63cc3d1ec4e853d88ea7c257cb13029744c026aa5ea741b0"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr_common::type_coercion::binary::try_type_union_resolution_with_struct (cognitive 32): datafusion_expr_common::type_coercion::binary::try_type_union_resolution_with_struct has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (23 pts), loops 5 (9 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"16e7ea129d212bb5a068b6caf14493abfd3f959e92d6db7c41184bd844ae79ab"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::extract_leaf_expressions::build_extraction_projection_impl (cognitive 32): datafusion_optimizer::extract_leaf_expressions::build_extraction_projection_impl has cognitive complexity 32 (threshold 15). Drivers by points: if/else 11 (22 pts), loops 4 (8 pts), boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/extract_leaf_expressions.rs"},"region":{"startLine":651}}}],"partialFingerprints":{"codehealthFindingId/v1":"53a4fa42874b10ec20943a52806e51472b373002f6072be2e97e85e88ab14d2e"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::extract_leaf_expressions::split_and_push_projection (cognitive 32): datafusion_optimizer::extract_leaf_expressions::split_and_push_projection has cognitive complexity 32 (threshold 15). Drivers by points: if/else 15 (23 pts), loops 2 (4 pts), boolean chains 3, match/switch 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/extract_leaf_expressions.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"3955aeedaada3ef7e6ff7dac3ca766849caa2ca1aaeb8b31e133899926994a19"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiLevelMergeBuilder::get_sorted_spill_files_to_merge (cognitive 32): MultiLevelMergeBuilder::get_sorted_spill_files_to_merge has cognitive complexity 32 (threshold 15). Drivers by points: if/else 8 (22 pts), match/switch 2 (5 pts), boolean chains 4, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b99a41f9e4b85632665305e00a4e0f962202fa870077a6e70f31fca22bbd6da"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::select_to_plan (cognitive 32): SqlToRel::select_to_plan has cognitive complexity 32 (threshold 15). Drivers by points: if/else 20 (23 pts), match/switch 3 (4 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9aa8463c5ed4d514cbd14ae1cb944f765a914006b2025e4aac430d8150c3c52"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeSignature::to_string_repr_with_names (cognitive 31): TypeSignature::to_string_repr_with_names has cognitive complexity 31 (threshold 15). Drivers by points: if/else 18 (27 pts), match/switch 2 (4 pts) (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/signature.rs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"b95d08a6acf160b586b9460c0c8193dd70b43c4496e9d0b7157e8bce656b28e0"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::math::round::round_columnar (cognitive 31): datafusion_functions::math::round::round_columnar has cognitive complexity 31 (threshold 15). Drivers by points: boolean chains 14, if/else 10 (14 pts), match/switch 2 (3 pts) (nesting depth added 5). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb645203df96624fb469e56e3ecf920c71cadc9707281fe84122dd72ecd537c3"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_window::lead_lag::evaluate_all_with_ignore_null (cognitive 31): datafusion_functions_window::lead_lag::evaluate_all_with_ignore_null has cognitive complexity 31 (threshold 15). Drivers by points: if/else 10 (20 pts), loops 4 (10 pts), boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-window/src/lead_lag.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c3ce6ef483794acc812d2bc6f9f21e5553beff5f7ac91748d59ad1ffa282246"}},{"ruleId":"D2","level":"warning","message":{"text":"StandardWindowExpr::evaluate_stateful (cognitive 31): StandardWindowExpr::evaluate_stateful has cognitive complexity 31 (threshold 15). Drivers by points: if/else 15 (26 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/window/standard.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"e595e65fb22d345d1724e8538e5af078679dc00b59d6d99d2b00769bdc43c27f"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedLoopJoinStream::process_left_range_join (cognitive 31): NestedLoopJoinStream::process_left_range_join has cognitive complexity 31 (threshold 15). Drivers by points: if/else 17 (24 pts), loops 3 (5 pts), boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3186}}}],"partialFingerprints":{"codehealthFindingId/v1":"11e6592518b7ffa47ec0fc52a99eeebc76630f9ae6d752ea8f54c0a8416e5cb0"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvWriterOptions::try_from (cognitive 31): CsvWriterOptions::try_from has cognitive complexity 31 (threshold 15). Drivers by points: if/else 20 (29 pts), match/switch 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"f01bece69b3e1d375c67561b2247518d361b51406d233ec2a3608489660b1069"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinNode::deserialize (cognitive 31): JoinNode::deserialize has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (27 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AnalyzeExecNode::deserialize, CsvScanExecNode::deserialize, FileSinkConfig::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":11601}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2d1d8a05c461e71752d1e1db914c290730d186cbb34bb39f0b234e85da76b7b"}},{"ruleId":"D2","level":"warning","message":{"text":"FileSinkConfig::deserialize (cognitive 31): FileSinkConfig::deserialize has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (27 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AnalyzeExecNode::deserialize, CsvScanExecNode::deserialize, JoinNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":8032}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6e0cdaf078f868719113e9f867a215038dfa0f47c3e6d3f1c81b3f19fbb13ce"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvScanExecNode::deserialize (cognitive 31): CsvScanExecNode::deserialize has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (27 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AnalyzeExecNode::deserialize, FileSinkConfig::deserialize, JoinNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":5067}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3b49876a9e1bbe65fa2176f2e8d7440dabc992685f6a6ba065a97cd217436a7"}},{"ruleId":"D2","level":"warning","message":{"text":"SymmetricHashJoinExecNode::deserialize (cognitive 31): SymmetricHashJoinExecNode::deserialize has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (27 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AnalyzeExecNode::deserialize, CsvScanExecNode::deserialize, FileSinkConfig::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":27780}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f2c7854d919c843ecc3c44ddfb1179a5dd39b3b9fae62fd2bce7bdcb0604360"}},{"ruleId":"D2","level":"warning","message":{"text":"AnalyzeExecNode::deserialize (cognitive 31): AnalyzeExecNode::deserialize has cognitive complexity 31 (threshold 15). Drivers by points: if/else 9 (27 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (CsvScanExecNode::deserialize, FileSinkConfig::deserialize, JoinNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a04f264fb41b441c389ab0da96e6c64accee7eb8711956c78e1ca3c0a4af821"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvFormat::infer_schema_from_stream (cognitive 30): CsvFormat::infer_schema_from_stream has cognitive complexity 30 (threshold 15). Drivers by points: if/else 10 (23 pts), loops 2 (5 pts), boolean chains 2 (nesting depth added 16). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/file_format.rs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"29aee3aceb1245dea3599ec6f2acf8849da9bf32c5b02be3efdb23e4350b4bc6"}},{"ruleId":"D2","level":"warning","message":{"text":"PushdownChecker::f_down (cognitive 30): PushdownChecker::f_down has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (21 pts), boolean chains 5, match/switch 1 (4 pts) (nesting depth added 15). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/projection_read_plan.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ac3794b03b0982104238d6f0e33eb3002de083f67e191c2cfb692e924b72b82"}},{"ruleId":"D2","level":"warning","message":{"text":"Expr::nullable (cognitive 30): Expr::nullable has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (14 pts), match/switch 7 (13 pts), boolean chains 3 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"93d9d311ff6712d058646d0f30115a1af31ab19f234eb174e70ee838af3559be"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::string::concat_ws::simplify_concat_ws (cognitive 30): datafusion_functions::string::concat_ws::simplify_concat_ws has cognitive complexity 30 (threshold 15). Drivers by points: match/switch 8 (18 pts), if/else 3 (9 pts), loops 1 (3 pts) (nesting depth added 18). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat_ws.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"f71b844fcc21deed27c79dbe44601ce870e1cc90c64c5a6f2c44e562a2d8b923"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::regex::regexpreplace::regexp_replace (cognitive 30): datafusion_functions::regex::regexpreplace::regexp_replace has cognitive complexity 30 (threshold 15). Drivers by points: match/switch 9 (22 pts), if/else 4 (8 pts) (nesting depth added 17). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpreplace.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a61e3ee0859a11c8e6cf4115653f32970f6e13fbf5bc0ab22059d787f639b3"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::arrays_zip::arrays_zip_inner (cognitive 30): datafusion_functions_nested::arrays_zip::arrays_zip_inner has cognitive complexity 30 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 4 (6 pts), match/switch 3 (6 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/arrays_zip.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"db9459df4cdeaae3d5469a79d8c40bb095ca820a3832ae0519db0197e93f1ba6"}},{"ruleId":"D2","level":"warning","message":{"text":"NthValueEvaluator::memoize (cognitive 30): NthValueEvaluator::memoize has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (22 pts), match/switch 3 (5 pts), boolean chains 3 (nesting depth added 15). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-window/src/nth_value.rs"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4e67d216b1878c614e595083e841a5cd5f62e7da56e02bc94142e1e51b8782d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::simplify_expressions::simplify_predicates::find_most_restrictive_predicate (cognitive 30): datafusion_optimizer::simplify_expressions::simplify_predicates::find_most_restrictive_predicate has cognitive complexity 30 (threshold 15). Drivers by points: if/else 8 (22 pts), boolean chains 4, match/switch 1 (3 pts), loops 1 (nesting depth added 16). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/simplify_predicates.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1ab2382274f199d9c7be811353e7ebfa1d88a8276778b4d9bbf3390d7643512"}},{"ruleId":"D2","level":"warning","message":{"text":"AsOfJoinStream::poll_next_impl (cognitive 30): AsOfJoinStream::poll_next_impl has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (23 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":1277}}}],"partialFingerprints":{"codehealthFindingId/v1":"3507856c44f3d2576e17d56835c535ac09bb0153ba7ebaa6cbd849c859bee512"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::utils::max_distinct_count (cognitive 30): datafusion_physical_plan::joins::utils::max_distinct_count has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (19 pts), match/switch 4 (8 pts), boolean chains 3 (nesting depth added 14). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":1025}}}],"partialFingerprints":{"codehealthFindingId/v1":"302d878fb9c4d6ffe6c0354dafa3744c713b6e19a395c4833405dd8c06d020d4"}},{"ruleId":"D2","level":"warning","message":{"text":"CreateExternalTableNode::serialize (cognitive 30): CreateExternalTableNode::serialize has cognitive complexity 30 (threshold 15). Drivers by points: if/else 30. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":4276}}}],"partialFingerprints":{"codehealthFindingId/v1":"41acabc701715829e107047cc34bd831a68ad88f1b23b841ba17e940d246e6f4"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::math::abs::spark_abs (cognitive 30): datafusion_spark::function::math::abs::spark_abs has cognitive complexity 30 (threshold 15). Drivers by points: if/else 13 (25 pts), match/switch 3 (5 pts) (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/abs.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"1435cdc698d20c2fbe16fb1654c6ac99a9753e850c7ea158da6b0790dd4b87b8"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::insert_to_plan (cognitive 30): SqlToRel::insert_to_plan has cognitive complexity 30 (threshold 15). Drivers by points: if/else 11 (15 pts), match/switch 4 (9 pts), loops 2 (5 pts), boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":2806}}}],"partialFingerprints":{"codehealthFindingId/v1":"789b5cb7f8ddd67d211d7b98482a816dea14921e9ad68933400a44d5567c03d7"}},{"ruleId":"D2","level":"warning","message":{"text":"check_asf_yaml_status_checks.check_post_merge_conditions (cognitive 30): check_asf_yaml_status_checks.check_post_merge_conditions has cognitive complexity 30 (threshold 15). Drivers by points: if/else 11 (20 pts), boolean chains 7, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ci/scripts/check_asf_yaml_status_checks.py"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"5246e96360ed25047bb50d9cd9d6e9f5fc39001e6b53ff7ada3e00061310c782"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::hash_dictionary_scatter (cognitive 29): datafusion_common::hash_utils::hash_dictionary_scatter has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (23 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 16). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ee064dac15faac53023a5670a14b6a5922875912a4ba15cefdf242cd4292240"}},{"ruleId":"D2","level":"warning","message":{"text":"LogicalPlan::with_new_exprs (cognitive 29): LogicalPlan::with_new_exprs has cognitive complexity 29 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 5 (10 pts), loops 2 (4 pts) (nesting depth added 14). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ab097cf6b3fe36810b2656c9ec602053e11520fa669cb8b49be4e370cd821cc"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupsAccumulatorAdapter::invoke_per_accumulator_with_scratch (cognitive 29): GroupsAccumulatorAdapter::invoke_per_accumulator_with_scratch has cognitive complexity 29 (threshold 15). Drivers by points: if/else 7 (15 pts), loops 7 (11 pts), match/switch 1 (3 pts) (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/groups_accumulator.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb56df8973fd7902372f501d37fe906aea9b7e21182ca1a1394b683698a16034"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::replace::general_replace (cognitive 29): datafusion_functions_nested::replace::general_replace has cognitive complexity 29 (threshold 15). Drivers by points: if/else 10 (23 pts), boolean chains 3, loops 2 (3 pts) (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/replace.rs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"a93fe18f0cc89a91c2e00b4e467c23d5788418fcc72e9e161e3340e99d5558c5"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::string::string_to_array_scalar_args (cognitive 29): datafusion_functions_nested::string::string_to_array_scalar_args has cognitive complexity 29 (threshold 15). Drivers by points: if/else 5 (15 pts), loops 5 (13 pts), match/switch 1 (nesting depth added 18). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa9763d6886a9347087630aacf4f52a7f3d6a3575982d9c2a9592ad95730f939"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::push_down_filter::push_down_all_join (cognitive 29): datafusion_optimizer::push_down_filter::push_down_all_join has cognitive complexity 29 (threshold 15). Drivers by points: if/else 17 (20 pts), boolean chains 6, loops 3 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"61641689d80919dab65e7d6a44e1e404d2a9dc9ae6193cc0c8c702c502e455c2"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateExec::fmt_as (cognitive 29): AggregateExec::fmt_as has cognitive complexity 29 (threshold 15). Drivers by points: if/else 17 (28 pts), match/switch 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2002}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1f2b0cc7c102a9cd3364ae9fbeb234ef5d2fec5f1e6c7a8c634bdee00378f25"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiLevelMergeBuilder::split_spill_file_in_half (cognitive 29): MultiLevelMergeBuilder::split_spill_file_in_half has cognitive complexity 29 (threshold 15). Drivers by points: if/else 11 (20 pts), boolean chains 6, loops 1 (2 pts), match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"35dccdd8f5b0768a7c28a7b89bbd9d9c384ad46e5e88fa2b855e4e73dedd24db"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::collection::size::spark_size_inner (cognitive 29): datafusion_spark::function::collection::size::spark_size_inner has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16 (28 pts), match/switch 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/collection/size.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"d168bc000d56337b22bd5228e5956f15763a71f58b23b6023de29b76ed1d7ca4"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::match_window_definitions (cognitive 29): SqlToRel::match_window_definitions has cognitive complexity 29 (threshold 15). Drivers by points: if/else 5 (17 pts), match/switch 1 (6 pts), loops 2 (5 pts), boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":1424}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6cfc1ae7b00cf5b3c869b4e2a05d8cad3245f60a6a6b1d41c494cd56acc1a6"}},{"ruleId":"D2","level":"warning","message":{"text":"InformationSchemaConfig::make_columns (cognitive 28): InformationSchemaConfig::make_columns has cognitive complexity 28 (threshold 15). Drivers by points: loops 4 (15 pts), if/else 3 (13 pts) (nesting depth added 21). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"3803a9fbd73e33d2e2442015c8ea2d0d8b68cfd9cdf2d361261fc6844c208bcb"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarValue::partial_cmp (cognitive 28): ScalarValue::partial_cmp has cognitive complexity 28 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 4 (5 pts), boolean chains 2 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"56b854333de94a68711cc75fbb29c0cd7902afac2dd0c5af948ee7e439667db3"}},{"ruleId":"D2","level":"warning","message":{"text":"DataFrame::describe (cognitive 28): DataFrame::describe has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (17 pts), match/switch 2 (7 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/dataframe/mod.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d78ab9422c2bd51b425b64273250decca7bbf238468044d5e06258be66a627e"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonArrayToNdjsonReader::process_byte (cognitive 28): JsonArrayToNdjsonReader::process_byte has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10 (20 pts), match/switch 3 (7 pts), boolean chains 1 (nesting depth added 14). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-json/src/utils.rs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"42f82897246c8396520bd37158d26b63f0ce62d524e8fa4baf35b0f8aac43888"}},{"ruleId":"D2","level":"warning","message":{"text":"PushDecoderStreamState::transition (cognitive 28): PushDecoderStreamState::transition has cognitive complexity 28 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 4 (11 pts), boolean chains 3, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/push_decoder.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"05761a39c3dcde72098ad48bc69fdb15c2b469b22c11b8c7679ef4f04e84d312"}},{"ruleId":"D2","level":"warning","message":{"text":"LogicalPlanBuilder::infer_data (cognitive 28): LogicalPlanBuilder::infer_data has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (22 pts), loops 2 (3 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"e341ddf49439e83442977d2df1b604920e57611b50d77ca3807c2756c4a5d447"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowFrameStateRange::calculate_index_of_row (cognitive 28): WindowFrameStateRange::calculate_index_of_row has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (17 pts), match/switch 2 (8 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/window_state.rs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fdf071c011be1a30c43c9f438e9d5b470910210b7e4e42ae483b97959810c0d"}},{"ruleId":"D2","level":"warning","message":{"text":"BinaryExpr::evaluate (cognitive 28): BinaryExpr::evaluate has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10 (23 pts), match/switch 3 (4 pts), boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"d593bffda46291048dab2e54c488de9509895088c5b72631d975dc14676869b1"}},{"ruleId":"D2","level":"warning","message":{"text":"DictionaryGroupValuesColumn::vectorized_append (cognitive 28): DictionaryGroupValuesColumn::vectorized_append has cognitive complexity 28 (threshold 15). Drivers by points: if/else 10 (24 pts), loops 2 (4 pts) (nesting depth added 16). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/dictionary.rs"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"4191bcc608bcbfb71c0ec4a68ea0f9c84341cb1801d4b7a1575c66072e3f9db2"}},{"ruleId":"D2","level":"warning","message":{"text":"ParquetColumnOptions::serialize (cognitive 28): ParquetColumnOptions::serialize has cognitive complexity 28 (threshold 15). Drivers by points: if/else 14, match/switch 7 (14 pts) (nesting depth added 7). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":5997}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a2d08bf339326470fef4f45e711779c73f4188970effabc23b4738bcc151a9"}},{"ruleId":"D2","level":"warning","message":{"text":"AsOfJoinNode::deserialize (cognitive 28): AsOfJoinNode::deserialize has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (24 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 2 other methods here (PhysicalAggregateExprNode::deserialize, SortMergeJoinExecNode::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1937}}}],"partialFingerprints":{"codehealthFindingId/v1":"278f48bdba0302c440e3c76d51549f6ec95f80b3ee0ee4952f66311e6c48df6d"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalAggregateExprNode::deserialize (cognitive 28): PhysicalAggregateExprNode::deserialize has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (24 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 2 other methods here (AsOfJoinNode::deserialize, SortMergeJoinExecNode::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18391}}}],"partialFingerprints":{"codehealthFindingId/v1":"75afc962aefd31bf01200de0c0b3bce3b674d9468077c918e0ddb978bc4a7cf2"}},{"ruleId":"D2","level":"warning","message":{"text":"FileScanExecConf::serialize (cognitive 28): FileScanExecConf::serialize has cognitive complexity 28 (threshold 15). Drivers by points: if/else 28. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (AggregateExecNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":7632}}}],"partialFingerprints":{"codehealthFindingId/v1":"40cd98c5a060298d57bdc19b9db14bea73284cb4211de9da36cc469537658bc5"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateExecNode::serialize (cognitive 28): AggregateExecNode::serialize has cognitive complexity 28 (threshold 15). Drivers by points: if/else 28. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (FileScanExecConf::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa4e93280ec06ffda12c2a1eb96b3e818519c71e4bf7d119169c804534f190c5"}},{"ruleId":"D2","level":"warning","message":{"text":"SortMergeJoinExecNode::deserialize (cognitive 28): SortMergeJoinExecNode::deserialize has cognitive complexity 28 (threshold 15). Drivers by points: if/else 8 (24 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 2 other methods here (AsOfJoinNode::deserialize, PhysicalAggregateExprNode::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 3 times rather than 3 independent problems. Splitting this body alone leaves the other 2 exactly as they are. Where these are variations on one operation, the change that clears all 3 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":26897}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ff8ae33732cef81a37433c885800b6ef26aec03d9c978d4ccc55653a9e00fc5"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::convert_simple_data_type (cognitive 28): SqlToRel::convert_simple_data_type has cognitive complexity 28 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 5 (9 pts), boolean chains 4 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/planner.rs"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"8947443a84e5ce8bb1558f17edb2333fa9ec8950a00831c874d764bfaa15c1b4"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedLoopJoinStream::poll_next (cognitive 27): NestedLoopJoinStream::poll_next has cognitive complexity 27 (threshold 15). Drivers by points: match/switch 9 (26 pts), loops 1 (nesting depth added 17). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":2103}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddfbbee493fd302f701f51a6ef1ce187c6eb18bef11b5568cd0a4742a62dacbc"}},{"ruleId":"D2","level":"warning","message":{"text":"Formatter::parse (cognitive 27): Formatter::parse has cognitive complexity 27 (threshold 15). Drivers by points: if/else 8 (22 pts), match/switch 1 (3 pts), boolean chains 1, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"f921bdb9f0586fed7af68e930a6c82f48d3a556096634c391f04a7bf2b5a90ad"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr_common::casts::try_cast_numeric_literal (cognitive 26): datafusion_expr_common::casts::try_cast_numeric_literal has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13 (17 pts), match/switch 5 (7 pts), boolean chains 2 (nesting depth added 6). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/casts.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"926b03a168ffd8bb71750ad5e0f2f7af2e2e18139f22628ad3862eb227bd78ec"}},{"ruleId":"D2","level":"warning","message":{"text":"TDigest::estimate_quantile (cognitive 26): TDigest::estimate_quantile has cognitive complexity 26 (threshold 15). Drivers by points: if/else 13 (20 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/tdigest.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bd0aa3b90dce8bf70b72cf5216512652a1a13d2c53758eba9b34ffdebea8b1d"}},{"ruleId":"D2","level":"warning","message":{"text":"CommonSubexprEliminate::try_optimize_aggregate (cognitive 26): CommonSubexprEliminate::try_optimize_aggregate has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (20 pts), loops 2 (4 pts), match/switch 2 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/common_subexpr_eliminate.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"246d7c3e947c27de83c46badf1a84ae3796e8e9f5ac9f84d5696245ffbe66b84"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleDistinctToGroupBy::rewrite (cognitive 26): SingleDistinctToGroupBy::rewrite has cognitive complexity 26 (threshold 15). Drivers by points: if/else 7 (16 pts), match/switch 4 (9 pts), boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/single_distinct_to_groupby.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c57da479cf08826672f38bfd100e377f29f151a479234e2ed470d6ad90268e5"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::push_down_limit::topk_through_join::push_topk_through_join (cognitive 26): datafusion_optimizer::push_down_limit::topk_through_join::push_topk_through_join has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (12 pts), match/switch 8 (11 pts), loops 3 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_limit/topk_through_join.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e3782fe7691410918a7d3132f4812f5fb8abc4660cdb05426c68740d1f8d83e"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrowBytesMap::insert_if_new_inner (cognitive 26): ArrowBytesMap::insert_if_new_inner has cognitive complexity 26 (threshold 15). Drivers by points: if/else 11 (23 pts), boolean chains 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/binary_map.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"e749f650ed7dc6133ad9afc2a636c39a660edbb648420ec89fb04300e06d0370"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_distribution::adjust_input_keys_ordering (cognitive 26): datafusion_physical_optimizer::ensure_requirements::enforce_distribution::adjust_input_keys_ordering has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14 (18 pts), match/switch 2 (5 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c36310f5303f144fed09f477cc0c18649c6d884bfc3165021835eb2918236e"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_proto::logical_plan::from_proto::parse_expr (cognitive 26): datafusion_proto::logical_plan::from_proto::parse_expr has cognitive complexity 26 (threshold 15). Drivers by points: match/switch 10 (18 pts), if/else 4 (8 pts) (nesting depth added 12). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"a289d8781ff3215f3be5070dc8e0ba88504a7f994e0db8fa3b2b2e2b948292f0"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_sql::unparser::rewrite::rewrite_plan_for_sort_on_non_projected_fields (cognitive 26): datafusion_sql::unparser::rewrite::rewrite_plan_for_sort_on_non_projected_fields has cognitive complexity 26 (threshold 15). Drivers by points: if/else 6 (10 pts), loops 4 (10 pts), match/switch 3 (5 pts), boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/rewrite.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"12d255d928a61e903205742c1161cf7fd135f729441e54b8874cde7151db4a10"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion::physical_planner::extract_update_assignments (cognitive 25): datafusion::physical_planner::extract_update_assignments has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (20 pts), loops 2 (5 pts) (nesting depth added 16). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":2580}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a4543d30d5ba3f4b16297bef64d471577c29476ddca7dd11591b3b4075d8faa"}},{"ruleId":"D2","level":"warning","message":{"text":"MemorySourceConfig::repartition_preserving_order (cognitive 25): MemorySourceConfig::repartition_preserving_order has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 4 (12 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/memory.rs"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"0972413a6f31bc9be9ea0f73f079dbf2729ebf072108986ef41f5750c00493ef"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowFrameStateGroups::calculate_index_of_row (cognitive 25): WindowFrameStateGroups::calculate_index_of_row has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13 (19 pts), loops 3, boolean chains 2, match/switch 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/window_state.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"28bba7ae83007348868fddd54e01a21e01bae6eaf536afa140757d7cf4c87f3d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::remove::general_remove (cognitive 25): datafusion_functions_nested::remove::general_remove has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (20 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/remove.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"8044c6561116e4ead46afc34cb65aaabeb81cb575037697f261cc6914b9e3fe3"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::extract_leaf_expressions::try_push_into_inputs (cognitive 25): datafusion_optimizer::extract_leaf_expressions::try_push_into_inputs has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (17 pts), loops 3 (5 pts), match/switch 1 (3 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/extract_leaf_expressions.rs"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bcbc4fb09a92865a6cd32b23e902ecb355c89116359ab2042eb4f8984a83388"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::join_selection::statistical_join_selection_subrule (cognitive 25): datafusion_physical_optimizer::join_selection::statistical_join_selection_subrule has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14 (21 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/join_selection.rs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bc7605f6358355106ca5b198a52c63b16660358f03cf0b8bac335b87697895c"}},{"ruleId":"D2","level":"warning","message":{"text":"GraphvizVisitor::pre_visit (cognitive 25): GraphvizVisitor::pre_visit has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13 (23 pts), boolean chains 1, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"8894d37beb71e1fa12600d6ab235cf22637d6a154980facc83fcfcfef8931f84"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterializingSortMergeJoinStream::join (cognitive 25): MaterializingSortMergeJoinStream::join has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 2 (4 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ee48a1f840287ca26bfe6db809b2413e645d30f6b6439cefc0f1d471ccc07c1"}},{"ruleId":"D2","level":"warning","message":{"text":"PrimitiveValuesRouter::route_with (cognitive 25): PrimitiveValuesRouter::route_with has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (17 pts), loops 3 (8 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (FloatValuesRouter::route_with) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/range.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb949cd0b9c74b93d6128615674899375fb4a2dc0724ef98e5803a8bf76de10c"}},{"ruleId":"D2","level":"warning","message":{"text":"FloatValuesRouter::route_with (cognitive 25): FloatValuesRouter::route_with has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (17 pts), loops 3 (8 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (PrimitiveValuesRouter::route_with) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/range.rs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d6c7f2387e09865685d57027abf0f35fe1cc01c90fa3c070b578de82165c4c7"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiLevelMergeBuilder::merge_sorted_runs_within_mem_limit (cognitive 25): MultiLevelMergeBuilder::merge_sorted_runs_within_mem_limit has cognitive complexity 25 (threshold 15). Drivers by points: if/else 8 (18 pts), match/switch 2 (3 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"509d0527a3aee20b97186a316a32b5ded9154e9e86d2b35ee91331d75268a5e8"}},{"ruleId":"D2","level":"warning","message":{"text":"ParquetColumnOptions::deserialize (cognitive 25): ParquetColumnOptions::deserialize has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":6081}}}],"partialFingerprints":{"codehealthFindingId/v1":"a86ada60690b3c6563f7b4a2599fe832c9e407e3188767ebb1219c6ed2486b05"}},{"ruleId":"D2","level":"warning","message":{"text":"UnnestNode::deserialize (cognitive 25): UnnestNode::deserialize has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AggregateUdfExprNode::deserialize, AsOfJoinExecNode::deserialize, PartitionedFile::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":28812}}}],"partialFingerprints":{"codehealthFindingId/v1":"4015504374a9d32bf9a1d7f1b8b9cd76f377fa4adc79fb9d0b2277356db2ca3f"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateUdfExprNode::deserialize (cognitive 25): AggregateUdfExprNode::deserialize has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AsOfJoinExecNode::deserialize, PartitionedFile::deserialize, PiecewiseMergeJoinExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":706}}}],"partialFingerprints":{"codehealthFindingId/v1":"92109b18fb630a4d8cd61666d6e6d7ec81cbe1bf1ffe27332be2e9bf1f8b6aa1"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionedFile::deserialize (cognitive 25): PartitionedFile::deserialize has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AggregateUdfExprNode::deserialize, AsOfJoinExecNode::deserialize, PiecewiseMergeJoinExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18041}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ba79ba5cd7f934fa5ad63776f8fb41805c4f44159574a52032298bdf29332e5"}},{"ruleId":"D2","level":"warning","message":{"text":"PiecewiseMergeJoinExecNode::deserialize (cognitive 25): PiecewiseMergeJoinExecNode::deserialize has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AggregateUdfExprNode::deserialize, AsOfJoinExecNode::deserialize, PartitionedFile::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23512}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa37d27aa2a92d4f922fa40679f8f5c1407cf150138ca3daf683483fff202730"}},{"ruleId":"D2","level":"warning","message":{"text":"AsOfJoinExecNode::deserialize (cognitive 25): AsOfJoinExecNode::deserialize has cognitive complexity 25 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 4 other methods here (AggregateUdfExprNode::deserialize, PartitionedFile::deserialize, PiecewiseMergeJoinExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 5 times rather than 5 independent problems. Splitting this body alone leaves the other 4 exactly as they are. Where these are variations on one operation, the change that clears all 5 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1728}}}],"partialFingerprints":{"codehealthFindingId/v1":"48a7bfb7eb63374c96d9c769a4f4e18dfe061ef97b09db4c73c52255d79bbd5d"}},{"ruleId":"D2","level":"warning","message":{"text":"ParseUrl::parse (cognitive 25): ParseUrl::parse has cognitive complexity 25 (threshold 15). Drivers by points: match/switch 8 (19 pts), if/else 4 (6 pts) (nesting depth added 13). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/url/parse_url.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"a897074eef687f4ef454158bbd8ac44407baa64a1a378f54c608de7e7f6bffa6"}},{"ruleId":"D2","level":"warning","message":{"text":"FileScanConfig::fmt_as (cognitive 24): FileScanConfig::fmt_as has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (23 pts), match/switch 1 (nesting depth added 13). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_scan_config/mod.rs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9ed33ebe5e3301c5d9479ea24f25f615e41070432938419d46a78e665243fd"}},{"ruleId":"D2","level":"warning","message":{"text":"PreparedAccessPlan::reorder_by_statistics (cognitive 24): PreparedAccessPlan::reorder_by_statistics has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (16 pts), match/switch 4 (7 pts), loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/access_plan.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df217559a5d087c393d9e1823a52c57514dfd037762913b0acfe126f37fc86b"}},{"ruleId":"D2","level":"warning","message":{"text":"ConcatFunc::invoke_with_args (cognitive 24): ConcatFunc::invoke_with_args has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 4 (8 pts), loops 2 (3 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff3ea4a491336f358025ebf2bc15aa9f969b5845ba54cd7af945a3dd8bf76da5"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::string::common::string_view_trim (cognitive 24): datafusion_functions::string::common::string_view_trim has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (15 pts), loops 3 (8 pts), match/switch 1 (nesting depth added 13). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/common.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ae76e5a14f568ce0202f70ba38953ed954126cddca88c14b2ee44dfa66938a7"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_aggregate_common::aggregate::groups_accumulator::accumulate::accumulate_indices (cognitive 24): datafusion_functions_aggregate_common::aggregate::groups_accumulator::accumulate::accumulate_indices has cognitive complexity 24 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 4 (8 pts), match/switch 1 (nesting depth added 13). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/groups_accumulator/accumulate.rs"},"region":{"startLine":591}}}],"partialFingerprints":{"codehealthFindingId/v1":"219d10d7280f2cb8ef403686c221b31014e329cd7dda235172bcd5d5ac1d62f8"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::cosine_distance::general_cosine_distance (cognitive 24): datafusion_functions_nested::cosine_distance::general_cosine_distance has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 6, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/cosine_distance.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6f8f9f5c21c23a9fe9a441370e0361061674a339c3bcd605881635ae9ebc2ce"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderingEquivalenceClass::remove_redundant_entries (cognitive 24): OrderingEquivalenceClass::remove_redundant_entries has cognitive complexity 24 (threshold 15). Drivers by points: if/else 4 (18 pts), loops 3 (6 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/ordering.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe0b3865f22467553b5804ff948353a99e997a8a2cbaba857082cff0cecc6bda"}},{"ruleId":"D2","level":"warning","message":{"text":"DictionaryGroupValuesColumn::vectorized_equal_to (cognitive 24): DictionaryGroupValuesColumn::vectorized_equal_to has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/dictionary.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"7079abe38857429b4e8ecdcb0ba873238f46067c4d58724c8fa6fce61f5f7bdb"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeRenderVisitor::split_up_extra_info (cognitive 24): TreeRenderVisitor::split_up_extra_info has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (13 pts), loops 4 (9 pts), boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":1271}}}],"partialFingerprints":{"codehealthFindingId/v1":"12d70dd826681ea6b488b6468830868b979d8fe852900844b87653a523054e7c"}},{"ruleId":"D2","level":"warning","message":{"text":"RepartitionExec::pull_from_input (cognitive 24): RepartitionExec::pull_from_input has cognitive complexity 24 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 4 (8 pts), match/switch 2 (3 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/mod.rs"},"region":{"startLine":2273}}}],"partialFingerprints":{"codehealthFindingId/v1":"feac7e6254f52886437477f23eea6ffe5aed5ef5418ace75bd9c00851e3fec58"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::hash_join::exec::array_map_key_range (cognitive 24): datafusion_physical_plan::joins::hash_join::exec::array_map_key_range has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14 (20 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"36b5c94a309d399429e754e42ad4ce1d58a9baf46927c0b503393d12b4bbe369"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::utils::estimate_semi_join_cardinality (cognitive 24): datafusion_physical_plan::joins::utils::estimate_semi_join_cardinality has cognitive complexity 24 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 6, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":957}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d9c74221c09042972b3ac0b90038a20188d92bd1306ef5833b27a5770326b7d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::utils::compare_join_arrays (cognitive 24): datafusion_physical_plan::joins::utils::compare_join_arrays has cognitive complexity 24 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 4 (10 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":2553}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b6b436cfcd778abf14acb345637f8979f0465729cfef2748c752c9009226f93"}},{"ruleId":"D2","level":"warning","message":{"text":"SparkNextDay::invoke_with_args (cognitive 24): SparkNextDay::invoke_with_args has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 5 (10 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/next_day.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"3880986e245391bd092d8a56f39dde88787fb593836580f8c91bbc79e4eae338"}},{"ruleId":"D2","level":"warning","message":{"text":"ConversionSpecifier::format_char (cognitive 24): ConversionSpecifier::format_char has cognitive complexity 24 (threshold 15). Drivers by points: if/else 9 (17 pts), loops 2 (6 pts), match/switch 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1621}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3d0988e86036a6bab91cadc8cd11749643c7c95655bbe3712417b0c48b6a49b"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_sqllogictest::bin::sqllogictests::run_tests (cognitive 24): datafusion_sqllogictest::bin::sqllogictests::run_tests has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (12 pts), boolean chains 5, loops 2 (4 pts), match/switch 3 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/bin/sqllogictests.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dd4444e3f1c10eedbbf605e20a6dbe22bd8a06db4944bcb2b9560350e49221f"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::rel::aggregate_rel::from_aggregate_rel (cognitive 24): datafusion_substrait::logical_plan::consumer::rel::aggregate_rel::from_aggregate_rel has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 4 (12 pts), loops 3 (7 pts), if/else 4 (5 pts) (nesting depth added 13). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/rel/aggregate_rel.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bace9f4f94c0c2ab5b445b00132cd5c8ee670da9899305853e91c480d0f4867"}},{"ruleId":"D2","level":"warning","message":{"text":"InformationSchemaConfig::make_tables (cognitive 23): InformationSchemaConfig::make_tables has cognitive complexity 23 (threshold 15). Drivers by points: if/else 3 (13 pts), loops 4 (10 pts) (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"f511e96a41b277aa2f0fecfae053fb61cb02337fdfec3474e228344f11481aaf"}},{"ruleId":"D2","level":"warning","message":{"text":"Documentation::to_doc_attribute (cognitive 23): Documentation::to_doc_attribute has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 4 (8 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/doc/src/lib.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f8b307e7c4c74713d8cc6abceb03b429c3263338ef2f031aa6cd32c8adc0d1"}},{"ruleId":"D2","level":"warning","message":{"text":"SignumFunc::invoke_with_args (cognitive 23): SignumFunc::invoke_with_args has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (18 pts), match/switch 3 (5 pts) (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/signum.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f3a1b7c3caca0ae3cc935600ec1a2aa87c7f4b528224e385d23e7d822331067"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::string::common::case_conversion_utf8view_ascii_inner (cognitive 23): datafusion_functions::string::common::case_conversion_utf8view_ascii_inner has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (19 pts), loops 2 (4 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/common.rs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8efde3193655c88f4a61fefd87d04407db48d44da8d7b0c775596b9ffa09b4a"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayAggGroupsAccumulator::evaluate (cognitive 23): ArrayAggGroupsAccumulator::evaluate has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 5 (9 pts), match/switch 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":655}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc1d120d6228750dbe8eaa5db322f285fec1dcaf7b37b87412efcae21a3db3c"}},{"ruleId":"D2","level":"warning","message":{"text":"TDigest::merge_digests (cognitive 23): TDigest::merge_digests has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 5 (8 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/tdigest.rs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac69e5cd5fc1b0fc1f6986c6673a3e5bb9ed16d6e534ffb9df0810ead803c4dc"}},{"ruleId":"D2","level":"warning","message":{"text":"PropagateEmptyRelation::rewrite (cognitive 23): PropagateEmptyRelation::rewrite has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 5, match/switch 3 (5 pts) (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/propagate_empty_relation.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"92d8e95d3483a468ec74981369a8d05ef581d5b5fff7ff3d4222577745c5f688"}},{"ruleId":"D2","level":"warning","message":{"text":"EquivalenceProperties::discover_new_orderings (cognitive 23): EquivalenceProperties::discover_new_orderings has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (16 pts), loops 3 (6 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/mod.rs"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee0bb2da6fcda3790b59fdcf49429ffcf163d55ac789148852bbd2954fd99faf"}},{"ruleId":"D2","level":"warning","message":{"text":"CaseBody::case_when_with_expr (cognitive 23): CaseBody::case_when_with_expr has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (16 pts), match/switch 2 (4 pts), boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/case.rs"},"region":{"startLine":779}}}],"partialFingerprints":{"codehealthFindingId/v1":"802d2606d7f5642b8a593c1a806b7b51f1634c18bab17b885b8a01372897909b"}},{"ruleId":"D2","level":"warning","message":{"text":"HigherOrderFunctionExpr::evaluate (cognitive 23): HigherOrderFunctionExpr::evaluate has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (16 pts), boolean chains 3, match/switch 2 (3 pts), loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/higher_order_function.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"da0de749db3df9c1e62b2fba62dd4da5f85abaa1c27f1f6af8c064e847764923"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrowBytesViewMap::insert_if_new_inner (cognitive 23): ArrowBytesViewMap::insert_if_new_inner has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12 (22 pts), loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/binary_view_map.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"eced2a6ada47b37f98f4de4db0fc1069bb8f9252ee015eb8b4c57e86ebd8bdbf"}},{"ruleId":"D2","level":"warning","message":{"text":"SortExec::fmt_as (cognitive 23): SortExec::fmt_as has cognitive complexity 23 (threshold 15). Drivers by points: if/else 5 (13 pts), match/switch 3 (5 pts), loops 1 (4 pts), boolean chains 1 (nesting depth added 13). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/sort.rs"},"region":{"startLine":1281}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8efa81d32bc89302ca5b1be54734e77ad954ae71569b753dd6c4b89655a55d6"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::projection::try_pushdown_through_join_with_column_indices (cognitive 23): datafusion_physical_plan::projection::try_pushdown_through_join_with_column_indices has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (14 pts), match/switch 3 (6 pts), loops 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/projection.rs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a82cd21cc00bd06cd5955016c974ff161e33da2818bdfb16168075957ceed3e"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::utils::calculate_join_output_ordering (cognitive 23): datafusion_physical_plan::joins::utils::calculate_join_output_ordering has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (18 pts), match/switch 2 (3 pts), boolean chains 2 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eabf1378c5f6bc93f6a6b19717b0e8a6066cc5c08192f2d46826f94e4a2e308"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::join_hash_map::get_matched_indices_with_limit_offset (cognitive 23): datafusion_physical_plan::joins::join_hash_map::get_matched_indices_with_limit_offset has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (19 pts), loops 2 (3 pts), match/switch 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/join_hash_map.rs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7db3aba7578423d7cf7cb7fefaf0ce13d89daa9aeb649869ac745e9e47d6e87"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarValue::try_from (cognitive 23): ScalarValue::try_from has cognitive complexity 23 (threshold 15). Drivers by points: match/switch 11 (15 pts), if/else 4 (6 pts), loops 1 (2 pts) (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/to_proto/mod.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"b45a1d8c477f4b320184da3f37ebd21a03ef5bb469b067abeb6d15e54c5fbcbf"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::json::json_tuple::json_tuple_inner (cognitive 23): datafusion_spark::function::json::json_tuple::json_tuple_inner has cognitive complexity 23 (threshold 15). Drivers by points: loops 4 (10 pts), match/switch 3 (7 pts), if/else 2 (6 pts) (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/json/json_tuple.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5f08d916f6ad2252c3cd877d80e7f085b7d60d8899226cc9ce7da0816bf815c"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::sql_identifier_to_expr (cognitive 23): SqlToRel::sql_identifier_to_expr has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (17 pts), boolean chains 4, loops 1 (2 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/identifier.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb5b9f994cd3ed092b7c7ee68af37eb5450e0493a437d92002ee21f53c22294e"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::sql_compound_field_access_to_expr (cognitive 23): SqlToRel::sql_compound_field_access_to_expr has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (12 pts), match/switch 5 (10 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/mod.rs"},"region":{"startLine":1298}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ad43ee8128e1a3360ba14678a2d956d4cf1226189442adafd37ba5197f93650"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::try_process_group_by_unnest (cognitive 23): SqlToRel::try_process_group_by_unnest has cognitive complexity 23 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 3 (8 pts), match/switch 1 (3 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f24e57e271e106d00d792f6596efdfab3f0599a3abceeed0e987bd6c98dad50"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_macros::user_doc::user_doc (cognitive 23): datafusion_macros::user_doc::user_doc has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18 (22 pts), match/switch 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/macros/src/user_doc.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e87c058c5063af1b4b6b9d51b4b20d8cdfb869f2a1c3c45ddb334fb56599242"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::datetime::common::handle_array_op (cognitive 22): datafusion_functions::datetime::common::handle_array_op has cognitive complexity 22 (threshold 15). Drivers by points: match/switch 3 (11 pts), if/else 4 (9 pts), loops 1 (2 pts) (nesting depth added 14). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/common.rs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"1844037610bee92d25692455ef9db5ca72a00e25298c0175abd6eb04588e4ee9"}},{"ruleId":"D2","level":"warning","message":{"text":"DistinctArrayAggAccumulator::retract_batch (cognitive 22): DistinctArrayAggAccumulator::retract_batch has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":1113}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd5a450e86f6bfa6327bb4ef85ebf2e33dadb05699de2988a4c42db0f847f317"}},{"ruleId":"D2","level":"warning","message":{"text":"Range::gen_range_timestamp (cognitive 22): Range::gen_range_timestamp has cognitive complexity 22 (threshold 15). Drivers by points: boolean chains 11, if/else 5 (9 pts), loops 1, match/switch 1 (nesting depth added 4). Of this number, 21 points are the body\u0027s own statements and 1 belongs to one function item inside it that branches. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/range.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae735141045f425c2637f83c5cde233efe6fc6273a6f0bfe2827f2c43be0d936"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::range::generate_range_values (cognitive 22): datafusion_functions_nested::range::generate_range_values has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (13 pts), loops 2 (4 pts), match/switch 2 (4 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/range.rs"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"398efecf5e5f66dced66c5c729a1c5f578a006af3466ba1cc52ce422c86a027a"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::push_down_limit::rewrite_limit (cognitive 22): datafusion_optimizer::push_down_limit::rewrite_limit has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14 (21 pts), match/switch 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_limit.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"151fa48e2c99f0692825708ac5a36bca5c145729edf36d859de31e6ac0899e38"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::single_distinct_to_groupby::is_single_distinct_agg (cognitive 22): datafusion_optimizer::single_distinct_to_groupby::is_single_distinct_agg has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (13 pts), loops 2 (5 pts), boolean chains 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/single_distinct_to_groupby.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb9c54e744e4288fc0e350f173563a877c9ecc98d9a9fa91222ce5a0e2d51d37"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupValuesColumn::emit (cognitive 22): GroupValuesColumn::emit has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 2 (4 pts), loops 1 (3 pts), boolean chains 1 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":1174}}}],"partialFingerprints":{"codehealthFindingId/v1":"066a7edd0f8576ec4c49f8892c7b74c660ed42661477edd8511493e8f32c8da9"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderedSingleAggregateStream::handle_reading_input (cognitive 22): OrderedSingleAggregateStream::handle_reading_input has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (15 pts), match/switch 4 (7 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"9746020bd723780de005314cba9ce5a071d797c383ad18f7afac4d43a1c61cd7"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterializingSortMergeJoinStream::extend_buffered_group (cognitive 22): MaterializingSortMergeJoinStream::extend_buffered_group has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (15 pts), loops 2 (4 pts), match/switch 1 (3 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":1295}}}],"partialFingerprints":{"codehealthFindingId/v1":"068c7c5b3e3ad4aedafb704c68a488842d050ddb7c1ca9d52da80bb104dee9c4"}},{"ruleId":"D2","level":"warning","message":{"text":"MaterializingSortMergeJoinStream::materialize_right_columns (cognitive 22): MaterializingSortMergeJoinStream::materialize_right_columns has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (16 pts), loops 3 (5 pts), match/switch 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":1683}}}],"partialFingerprints":{"codehealthFindingId/v1":"705a843ebcc12ff8f6ba7cc88f2103e6b493b9cffd909474e00be330bc69a61c"}},{"ruleId":"D2","level":"warning","message":{"text":"MessageFramer::push (cognitive 22): MessageFramer::push has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/spill/mod.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3474190fd37d152170a1ed1552b0718ade086e3b615e17abb2ff23721a2ea9e"}},{"ruleId":"D2","level":"warning","message":{"text":"ColumnStats::deserialize (cognitive 22): ColumnStats::deserialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":1163}}}],"partialFingerprints":{"codehealthFindingId/v1":"b250ec639e1abd2a1cee389a571ddc56a2c229fe5c0b0242e9d351af8ae90774"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalScalarUdfNode::deserialize (cognitive 22): PhysicalScalarUdfNode::deserialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":22539}}}],"partialFingerprints":{"codehealthFindingId/v1":"83789d1510ff80dd99093fe028444538653634a746ace7c7c60c4cf79a584e2b"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterExecNode::deserialize (cognitive 22): FilterExecNode::deserialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 6 other methods here (GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, MemoryScanExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":8250}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7e40f9229fe58ad883915325eaea7be80843bc56cac14d6160ed59d72b9f50d"}},{"ruleId":"D2","level":"warning","message":{"text":"ParquetScanExecNode::deserialize (cognitive 22): ParquetScanExecNode::deserialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":16814}}}],"partialFingerprints":{"codehealthFindingId/v1":"398b049097892e3153e64517d6082962d056c85239eb7a4216ec0d642e3ed09a"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvScanExecNode::serialize (cognitive 22): CsvScanExecNode::serialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 18, match/switch 2 (4 pts) (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":4991}}}],"partialFingerprints":{"codehealthFindingId/v1":"66a2ff2527790fea9697e06040b29ae9948afb0c3646ae27b3a5257d9ef3e0d0"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryScanExecNode::deserialize (cognitive 22): MemoryScanExecNode::deserialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":15103}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b429075e20706a64dc60ca862baff4fbf3a7ff8f0b8bf5b24b19c7a4f7a872c"}},{"ruleId":"D2","level":"warning","message":{"text":"HashJoinExecNode::serialize (cognitive 22): HashJoinExecNode::serialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 22. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9718}}}],"partialFingerprints":{"codehealthFindingId/v1":"70f92bbc80bc084fe8574bff7f564dd61205aeab9bab8ecd2119725878036143"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowAggExecNode::deserialize (cognitive 22): WindowAggExecNode::deserialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, GenerateSeriesNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":29667}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b5bf9f72eb8e04239b886ff75137f022d9aec1257577cad95c36deb520cc2c8"}},{"ruleId":"D2","level":"warning","message":{"text":"GenerateSeriesArgsTimestamp::deserialize (cognitive 22): GenerateSeriesArgsTimestamp::deserialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesNode::deserialize, MemoryScanExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9098}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8c3925043068e7a0678a838c9f21c037ab5c61394c2a633209162d8f439db6f"}},{"ruleId":"D2","level":"warning","message":{"text":"GenerateSeriesNode::deserialize (cognitive 22): GenerateSeriesNode::deserialize has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 6 other methods here (FilterExecNode::deserialize, GenerateSeriesArgsTimestamp::deserialize, MemoryScanExecNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 7 times rather than 7 independent problems. Splitting this body alone leaves the other 6 exactly as they are. Where these are variations on one operation, the change that clears all 7 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9345}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5302bd3cfcd62ef36dd957d8ca82b01a9951665f24510e6c945060c5f88bb8a"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::expr::window_function::from_substrait_bound (cognitive 22): datafusion_substrait::logical_plan::consumer::expr::window_function::from_substrait_bound has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (16 pts), match/switch 3 (6 pts) (nesting depth added 13). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/expr/window_function.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"c212b0f8c1d61966fe07f7068ac22d393c5cd686d48c85513723dc1ff6b5b947"}},{"ruleId":"D2","level":"warning","message":{"text":"InformationSchemaConfig::make_views (cognitive 21): InformationSchemaConfig::make_views has cognitive complexity 21 (threshold 15). Drivers by points: if/else 3 (13 pts), loops 3 (8 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"de571510a969b7692b33393ed604cf0ed4380332ca104e7e62909cd45dc02584"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_datasource::file_scan_config::sort_pushdown::any_file_has_nulls_in_sort_columns (cognitive 21): datafusion_datasource::file_scan_config::sort_pushdown::any_file_has_nulls_in_sort_columns has cognitive complexity 21 (threshold 15). Drivers by points: if/else 4 (11 pts), loops 3 (6 pts), match/switch 1 (4 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_scan_config/sort_pushdown.rs"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ccde1a5143f20201bfdea2241457810116d7c4aa6b01bc651377ea19ebd17fe"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonFormat::infer_schema (cognitive 21): JsonFormat::infer_schema has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (18 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-json/src/file_format.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"14101cbe9c4ddded9dcc23b03ba1ccf2a5ec8e9c6c11ff058243fa7da8605779"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlDisplay::fmt (cognitive 21): SqlDisplay::fmt has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 2 (4 pts), match/switch 2 (3 pts) (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3303}}}],"partialFingerprints":{"codehealthFindingId/v1":"28737295c4c9764c8ec71ef5400fde2f69700aa4fb49772763121001f04d66a4"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr_common::statistics::create_bernoulli_from_comparison (cognitive 21): datafusion_expr_common::statistics::create_bernoulli_from_comparison has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (18 pts), match/switch 2 (3 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed75bcc837e034b25937c3c927e2c535ca62d1f139bd6e054de9cad4b7f7ccd5"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::math::nanvl::nanvl_impl (cognitive 21): datafusion_functions::math::nanvl::nanvl_impl has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (18 pts), loops 1 (2 pts), match/switch 1 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/nanvl.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"48d0786f0ed937fa44402e079684a0786c9a6240f9b6bfc80e9046cd1db5f1ef"}},{"ruleId":"D2","level":"warning","message":{"text":"BytesValueState::take (cognitive 21): BytesValueState::take has cognitive complexity 21 (threshold 15). Drivers by points: loops 6 (12 pts), match/switch 7 (9 pts) (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last/state.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"147b88c4a6eadec13f5f9633b6def881407c4c6f00a89ca78427f78182ee01ef"}},{"ruleId":"D2","level":"warning","message":{"text":"MinMaxBytesAccumulator::build_array (cognitive 21): MinMaxBytesAccumulator::build_array has cognitive complexity 21 (threshold 15). Drivers by points: loops 6 (12 pts), match/switch 7 (9 pts) (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max/min_max_bytes.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"f40d4a070df87f0043cccc6ef2c0769567003964fa532773089107163efa8207"}},{"ruleId":"D2","level":"warning","message":{"text":"TDigest::merge_sorted_f64 (cognitive 21): TDigest::merge_sorted_f64 has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13 (18 pts), boolean chains 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/tdigest.rs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"eabfe06d0cf3da883e3b7b2fb26e5089fcc7f5184e077c676bad71d2019c697b"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::resize::general_list_resize (cognitive 21): datafusion_functions_nested::resize::general_list_resize has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (10 pts), boolean chains 5, loops 2 (3 pts), match/switch 2 (3 pts) (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/resize.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"67ebba8881a4a30e5b533afdd9d0c0ee0a6c82ef218a7262b349a635237514ba"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::array_normalize::general_array_normalize (cognitive 21): datafusion_functions_nested::array_normalize::general_array_normalize has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 3 (6 pts), match/switch 1 (2 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_normalize.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"23cbe5d64dceb8b15a638f259124ed2005b7d19047c39c910dbfb641186348cc"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeCoercionRewriter::f_up (cognitive 21): TypeCoercionRewriter::f_up has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 5 (9 pts), if/else 5 (8 pts), boolean chains 4 (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5d4e5d1d5bc0dce1531ea75680c99a900141909eed6fdc98850088de151cfec"}},{"ruleId":"D2","level":"warning","message":{"text":"DecorrelatePredicateSubquery::rewrite (cognitive 21): DecorrelatePredicateSubquery::rewrite has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 2 (5 pts), loops 2 (3 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate_predicate_subquery.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4f54d50dfcaa46963836e28e96d14214e922af27c2cebdbe6f95db8ef7fb0ae"}},{"ruleId":"D2","level":"warning","message":{"text":"Optimizer::optimize (cognitive 21): Optimizer::optimize has cognitive complexity 21 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 2 (6 pts), loops 2 (3 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/optimizer.rs"},"region":{"startLine":601}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d01001ea73224882043977f5160c39b0e3b2c94d98c7330bc91f3e703b90371"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultPhysicalExprAdapterRewriter::try_narrow_struct_cast (cognitive 21): DefaultPhysicalExprAdapterRewriter::try_narrow_struct_cast has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (14 pts), boolean chains 5, loops 1, match/switch 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-adapter/src/schema_rewriter.rs"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff341a02c3f0b9c7950beb50e1ee8eeae681479815bdd6de258eaa37cddab8f7"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_sorting::ensure_sorting (cognitive 21): datafusion_physical_optimizer::ensure_requirements::enforce_sorting::ensure_sorting has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 3, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/mod.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"893bac0c9f73e3e652d16f3ee2f199dff111ca6f887a9a6583147ad07feef9c0"}},{"ruleId":"D2","level":"warning","message":{"text":"IndentVisitor::pre_visit (cognitive 21): IndentVisitor::pre_visit has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (20 pts), match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f4842730fbf4952ed09eb43fb86cc0ec5faee86b157fbb15205d81a1ee9a3b0"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterExec::statistics_helper (cognitive 21): FilterExec::statistics_helper has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 2 (5 pts), match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/filter.rs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"877b0f3f791dc9fb45bf108d2b6655f853dbf32cf4d1eb243e726849c92b8118"}},{"ruleId":"D2","level":"warning","message":{"text":"HashJoinStream::process_probe_batch (cognitive 21): HashJoinStream::process_probe_batch has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16 (18 pts), match/switch 2, boolean chains 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/stream.rs"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"053374194c0812bfea00e42d86521b3f7204e48cb4627e7ec942f95208f531a2"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::utils::build_batch_from_indices (cognitive 21): datafusion_physical_plan::joins::utils::build_batch_from_indices has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 2 (5 pts), boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":1303}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b508b9e57f860226efdb6a64039d680ba92bac3da560adfa60ffd20ca4dcdd6"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_proto::logical_plan::to_proto::serialize_expr (cognitive 21): datafusion_proto::logical_plan::to_proto::serialize_expr has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 7 (12 pts), if/else 4 (7 pts), loops 1 (2 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/to_proto.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"169c6be0f3a27ab287916bfff56c732045466a4fd8007ece652a094cd83cf3ad"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarValue::try_from (cognitive 21): ScalarValue::try_from has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 7 (13 pts), if/else 4 (6 pts), loops 1 (2 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"d176990e822018c083b8773bf37af1bd9579fc34356156966b74591e7d33827c"}},{"ruleId":"D2","level":"warning","message":{"text":"ConversionSpecifier::format_decimal (cognitive 21): ConversionSpecifier::format_decimal has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12 (18 pts), match/switch 2, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1958}}}],"partialFingerprints":{"codehealthFindingId/v1":"595594715c985a5c854b46fe8a309f2a3efab4b61e26cc327631da70905946fd"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::math::negative::spark_negative (cognitive 21): datafusion_spark::function::math::negative::spark_negative has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 3 (5 pts) (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/negative.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"deb65febb46b27c0b6f660d0b70844d604ce3d58b652bfb52c99bc6d3d8752d0"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::explain_to_plan (cognitive 21): SqlToRel::explain_to_plan has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13 (17 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":2113}}}],"partialFingerprints":{"codehealthFindingId/v1":"d148371b02bbcf3caf940f9ed34d0f0d7fd29b639bf28ea75aeb8da92db0d508"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::expr::subquery::from_subquery (cognitive 21): datafusion_substrait::logical_plan::consumer::expr::subquery::from_subquery has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 5 (12 pts), if/else 4 (9 pts) (nesting depth added 12). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/expr/subquery.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf62cd8d6fb6d09089d4f69485e5d7f3fd7eee235cc515c149cb65d8829e1624"}},{"ruleId":"D2","level":"warning","message":{"text":"PrintOptions::write_output (cognitive 21): PrintOptions::write_output has cognitive complexity 21 (threshold 15). Drivers by points: if/else 4 (12 pts), loops 2 (9 pts) (nesting depth added 15). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/print_options.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f8360a8e41eb82dca9f2a34a79946ad66b93e5915e85f2a2497345f4e308667"}},{"ruleId":"D2","level":"warning","message":{"text":"NativeType::fmt (cognitive 20): NativeType::fmt has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 2 (4 pts), match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/types/native.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dd3db27a86ca46dcbd0ff24f153bf7f518907e277dda13d4af3e378d4d669c1"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::nested_struct::compact_list_view_values (cognitive 20): datafusion_common::nested_struct::compact_list_view_values has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (11 pts), boolean chains 5, loops 4 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/nested_struct.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e8a30a50b2002036f47e3621b7cf2322aa5e762433592ee7a98e91e8235a942"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_datasource_parquet::projection_read_plan::build_read_plan_with_cast_clipping (cognitive 20): datafusion_datasource_parquet::projection_read_plan::build_read_plan_with_cast_clipping has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 4, match/switch 2 (4 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/projection_read_plan.rs"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a7292ba15879afa2e197651562f768f261c46eb24fef4024d031382d5143f47"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr::type_coercion::functions::value_fields_with_higher_order_udf (cognitive 20): datafusion_expr::type_coercion::functions::value_fields_with_higher_order_udf has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 6 (10 pts), if/else 4 (8 pts), loops 1 (2 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1b35e252f576aadeafab63b0a28e9135ede948ccb5bf9c4c7ddea46b7bdcc6d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr::expr_rewriter::guarantees::rewrite_between (cognitive 20): datafusion_expr::expr_rewriter::guarantees::rewrite_between has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15 (18 pts), boolean chains 1, match/switch 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_rewriter/guarantees.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f0a6e57667974a8b000d7ca027590037e9c01e686d085bdeefdf0c05f63c67"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::string::repeat::repeat_impl (cognitive 20): datafusion_functions::string::repeat::repeat_impl has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 3 (6 pts) (nesting depth added 9). Of this number, 17 points are the body\u0027s own statements and 3 belong to one function item inside it that branches. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/repeat.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bdda53ede393462db7db8893bfae1eb76cf9a9cea23a8d43d71592f5177b22c"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::core::getfield::simplify_get_field_over_struct_constructor (cognitive 20): datafusion_functions::core::getfield::simplify_get_field_over_struct_constructor has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (17 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/getfield.rs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba181e7ab75b7eb634300a35f14022f3c1bb5a5784f52404a71b3b7087a6b224"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::datetime::date_bin::date_bin_impl (cognitive 20): datafusion_functions::datetime::date_bin::date_bin_impl has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 7 (10 pts), if/else 6 (9 pts), boolean chains 1 (nesting depth added 6). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_bin.rs"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"fff71fc5d1317951a2d0f308a4031f71d3269c343fc2d946d2960e3030783d0d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::simplify_expressions::linear_aggregates::rewrite_multiple_linear_aggregates (cognitive 20): datafusion_optimizer::simplify_expressions::linear_aggregates::rewrite_multiple_linear_aggregates has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (17 pts), loops 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/linear_aggregates.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"f28a77e90b1036c072a49d2fc8969deee9206426d168e1a6bea8aede718d03c6"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::simplify_expressions::regex::anchored_alternation_to_exprs (cognitive 20): datafusion_optimizer::simplify_expressions::regex::anchored_alternation_to_exprs has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (16 pts), loops 1 (3 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/regex.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dfb0ecc05a77ceaee138d157047d0b6f69cf0bfbc69861112b922d393d7e564"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteralGuarantee::analyze (cognitive 20): LiteralGuarantee::analyze has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (15 pts), loops 1 (3 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/utils/guarantee.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"52708c3bef270dcd3052c2c3bb0739173a3e75cb24e4138d68944abab013aa74"}},{"ruleId":"D2","level":"warning","message":{"text":"DictionaryGroupValuesColumn::take_n (cognitive 20): DictionaryGroupValuesColumn::take_n has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (17 pts), loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/dictionary.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"292c9cc537137a7520da03071ae5328268c8b95f60dec081a98b000babdb360e"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeRenderVisitor::render_bottom_layer (cognitive 20): TreeRenderVisitor::render_bottom_layer has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 4, loops 2 (3 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":1213}}}],"partialFingerprints":{"codehealthFindingId/v1":"566c86833192d4e0778e097874050487ff98a9e54295734e6e02f49767c35e41"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedLoopJoinStream::handle_emit_global_right_unmatched (cognitive 20): NestedLoopJoinStream::handle_emit_global_right_unmatched has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (11 pts), match/switch 5 (9 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":2982}}}],"partialFingerprints":{"codehealthFindingId/v1":"763fe1ffa9106da3eee496dcbe8a424f20a561e0730cc89e64101c4aed7ac70b"}},{"ruleId":"D2","level":"warning","message":{"text":"RepartitionExecState::consume_input_streams (cognitive 20): RepartitionExecState::consume_input_streams has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (12 pts), loops 3 (5 pts), match/switch 2, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/mod.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"3be0ba8994c32833273af5e476fb1585e3c1879c5ab12b6e2942ee02829ed002"}},{"ruleId":"D2","level":"warning","message":{"text":"PerPartitionStream::poll_next_inner (cognitive 20): PerPartitionStream::poll_next_inner has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 5 (15 pts), if/else 1 (4 pts), loops 1 (nesting depth added 13). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/mod.rs"},"region":{"startLine":2525}}}],"partialFingerprints":{"codehealthFindingId/v1":"82facb76865c5f228ed62536be7fae06ee5c6a34740f87c9675168db21e909af"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::filter::collect_equality_columns (cognitive 20): datafusion_physical_plan::filter::collect_equality_columns has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 1 (3 pts), boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/filter.rs"},"region":{"startLine":1123}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c5924050d7eaf9090c269911c5ad59201dcf78f4367e0b34efc8cd9c4b93b0d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::join_hash_map::get_matched_indices (cognitive 20): datafusion_physical_plan::joins::join_hash_map::get_matched_indices has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (16 pts), loops 2 (4 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/join_hash_map.rs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"19ad90c97a26b11d5ecfaad7d720ba3f888524fe86a6a6d105e18e11a9a55113"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::aggregates::group_values::multi_group_by::make_group_column (cognitive 20): datafusion_physical_plan::aggregates::group_values::multi_group_by::make_group_column has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 10 (16 pts), if/else 2 (3 pts), boolean chains 1 (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":959}}}],"partialFingerprints":{"codehealthFindingId/v1":"304470b86b818da43e7fb5087571627e162e5238c04cce524b31e7aae1c17730"}},{"ruleId":"D2","level":"warning","message":{"text":"ListingTableScanNode::serialize (cognitive 20): ListingTableScanNode::serialize has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, match/switch 1 (2 pts) (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":13060}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffe9486068b216ae86ed316bcb987ab52c491495f1158415d705f13aeafa5157"}},{"ruleId":"D2","level":"warning","message":{"text":"WindowExprNode::serialize (cognitive 20): WindowExprNode::serialize has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, match/switch 1 (2 pts) (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (PhysicalWindowExprNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":29797}}}],"partialFingerprints":{"codehealthFindingId/v1":"24a9fb485681082c866f5d192aa4ceeb48a1f3d0d95225d1a4756055d62cdf26"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalWindowExprNode::serialize (cognitive 20): PhysicalWindowExprNode::serialize has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, match/switch 1 (2 pts) (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (WindowExprNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23200}}}],"partialFingerprints":{"codehealthFindingId/v1":"5da4f35e0ab3b4a4830f81b5053bef329d77af471ba51c984e46c8e23d7684b7"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_pruning::pruning_predicate::build_compact_in_list_expr (cognitive 20): datafusion_pruning::pruning_predicate::build_compact_in_list_expr has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11 (12 pts), match/switch 3 (5 pts), boolean chains 2, loops 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":1538}}}],"partialFingerprints":{"codehealthFindingId/v1":"e034d04453439f9faf4505bf3d53b605d52538897c088461a095b6ede5169726"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::map::utils::map_deduplicate_keys (cognitive 20): datafusion_spark::function::map::utils::map_deduplicate_keys has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (15 pts), loops 2 (4 pts), boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/map/utils.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ead134fcdbf2eb1d324967c1fe55b8cd1dccee0b806b6e9b92ad544c5af1cc5"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_sql::unparser::utils::try_transform_to_simple_table_scan_with_filters (cognitive 20): datafusion_sql::unparser::utils::try_transform_to_simple_table_scan_with_filters has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (14 pts), loops 2 (4 pts), match/switch 1 (2 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/utils.rs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe3b4979180adf625b38927138fa4c037d619ae543e14fb4f6805f42764ff6dd"}},{"ruleId":"D2","level":"warning","message":{"text":"download-python-wheels.main (cognitive 20): download-python-wheels.main has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 4 (6 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dev/release/download-python-wheels.py"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"928d086bc2d45b3ed787bbf9843bf8d47040030b354e4e37fc40c83b32b5d28e"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_catalog::memory::table::update_rows (cognitive 19): datafusion_catalog::memory::table::update_rows has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 2 (7 pts), if/else 2 (6 pts), loops 3 (6 pts) (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/memory/table.rs"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"a52a10d5f3b77f870506aa306dd530ef55170ab946efb0cc08e256cbb8caa741"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::error::closest_valid_field (cognitive 19): datafusion_common::error::closest_valid_field has cognitive complexity 19 (threshold 15). Drivers by points: if/else 2 (8 pts), loops 3 (6 pts), boolean chains 5 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/error.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c18d192ec78e6027066f9c4f7b7ac2ec71e50f6da913f17d53d00c953ae7b0d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::nested_struct::validate_map_key_data_type (cognitive 19): datafusion_common::nested_struct::validate_map_key_data_type has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 2 (4 pts), boolean chains 2, match/switch 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/nested_struct.rs"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"026ffd4d467b289cf71ba4e309d05cf226c33f3f20ed04200d6319ccc03a6d90"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_expr_common::interval_arithmetic::satisfy_greater (cognitive 19): datafusion_expr_common::interval_arithmetic::satisfy_greater has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (14 pts), boolean chains 5 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/interval_arithmetic.rs"},"region":{"startLine":1403}}}],"partialFingerprints":{"codehealthFindingId/v1":"15e137e896b73d566ac77f9bc9a7f2fcea6e748d11cb661a3963fb412ab41148"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::datetime::common::string_to_datetime_formatted (cognitive 19): datafusion_functions::datetime::common::string_to_datetime_formatted has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (16 pts), match/switch 2 (3 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/common.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"af815db9184b0fa6da70e9fd1ffbb1a692a0ba3630848c621fe6f094e3e34a18"}},{"ruleId":"D2","level":"warning","message":{"text":"PercentileContAccumulator::retract_batch (cognitive 19): PercentileContAccumulator::retract_batch has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (13 pts), loops 3 (5 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/percentile_cont.rs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a170912f228de580aca0ef6a726d9a679af1629f6c06d5479014ae90e045953"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_aggregate_common::merge_arrays::merge_ordered_arrays (cognitive 19): datafusion_functions_aggregate_common::merge_arrays::merge_ordered_arrays has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 2 (4 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/merge_arrays.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c79f68e7486277b45a88fc60e388f8a6ecad86181071ea8a93d392701873c90"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeCoercionRewriter::coerce_dml (cognitive 19): TypeCoercionRewriter::coerce_dml has cognitive complexity 19 (threshold 15). Drivers by points: loops 4 (12 pts), if/else 3 (5 pts), match/switch 1 (2 pts) (nesting depth added 11). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6641f766f0d3ddcd6cfc81655780dc6057e4af958a504fbfb7f2ff53553f6c6"}},{"ruleId":"D2","level":"warning","message":{"text":"PushdownSort::optimize (cognitive 19): PushdownSort::optimize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (13 pts), boolean chains 3, match/switch 2 (3 pts) (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/pushdown_sort.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"502b0dbfa0589d4c62c03df6a12b84a8cf32b5b4bbe94b7138184599233066ea"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupValuesColumn::scalarized_equal_to_remaining (cognitive 19): GroupValuesColumn::scalarized_equal_to_remaining has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 3 (7 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bf762a0cc2007e3094bad18e969d7b80f2e585539f52b08a54bade01430f990"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupedTopKAggregateStream::poll_next (cognitive 19): GroupedTopKAggregateStream::poll_next has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (14 pts), boolean chains 2, match/switch 1 (2 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_topk_stream.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"86ea5a987ecc3d8ad982f7a136fcccf798eb1df2bfa704f9cf733db4df33da80"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateExec::estimate_num_rows (cognitive 19): AggregateExec::estimate_num_rows has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (17 pts), match/switch 1 (2 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1803}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cec2e13a6c13f932bbee05c28ce4fb351e1998db23920717ad9df5b1c7afc2b"}},{"ruleId":"D2","level":"warning","message":{"text":"RecvFuture::poll (cognitive 19): RecvFuture::poll has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (14 pts), loops 1 (3 pts), boolean chains 1, match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/distributor_channels.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb5b163d93ea2d43b19ca39c1d4a8092031f195553b4aca0d85520d33555412f"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::projection::try_collapse_projection_chain (cognitive 19): datafusion_physical_plan::projection::try_collapse_projection_chain has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 4 (7 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/projection.rs"},"region":{"startLine":1370}}}],"partialFingerprints":{"codehealthFindingId/v1":"a91ce8e5f38f75144c56d9009b410cdcb9e8483f36644ba51e3fb1242b368be5"}},{"ruleId":"D2","level":"warning","message":{"text":"Field::deserialize (cognitive 19): Field::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (ScalarTimestampValue::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":4273}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f9d91211e24d17bb664604371d1e3d1759e23b1e4a885587999c225da787753"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarTimestampValue::deserialize (cognitive 19): ScalarTimestampValue::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (Field::deserialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":8516}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d2a7d4bc6bc571781f57471d692fc5a182bf18a38232a738854c9505b84d972"}},{"ruleId":"D2","level":"warning","message":{"text":"ViewTableScanNode::deserialize (cognitive 19): ViewTableScanNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":29302}}}],"partialFingerprints":{"codehealthFindingId/v1":"3743ee36c09f3f089fc6671fb4d3a756ecb68c35f3057fcce832f0cfa1e4bccc"}},{"ruleId":"D2","level":"warning","message":{"text":"CustomTableScanNode::deserialize (cognitive 19): CustomTableScanNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, DmlNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":5730}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd02c2681201ebac429704b537774461b78c82afdde9138670b2ece4653e5cbe"}},{"ruleId":"D2","level":"warning","message":{"text":"CreateViewNode::deserialize (cognitive 19): CreateViewNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CustomTableScanNode::deserialize, DmlNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":4657}}}],"partialFingerprints":{"codehealthFindingId/v1":"911aa66a6f15477fcc2879db810e238b9031b5da04362eb7e541c6603411a197"}},{"ruleId":"D2","level":"warning","message":{"text":"AnalyzeNode::deserialize (cognitive 19): AnalyzeNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (CreateViewNode::deserialize, CustomTableScanNode::deserialize, DmlNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1279}}}],"partialFingerprints":{"codehealthFindingId/v1":"11d8b88c870017c1512e483e4b11aef1d6eb1cc1191ad89223b7073cd0ea802a"}},{"ruleId":"D2","level":"warning","message":{"text":"DmlNode::deserialize (cognitive 19): DmlNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":6202}}}],"partialFingerprints":{"codehealthFindingId/v1":"da4dfc78aef99c4e408e4b3a93a1996425c879513ad8f15661496c67b5fee9c6"}},{"ruleId":"D2","level":"warning","message":{"text":"UnnestExecNode::deserialize (cognitive 19): UnnestExecNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":28636}}}],"partialFingerprints":{"codehealthFindingId/v1":"a11f12f0a5df92620fab08ea06614338752120445f3110d3435a77cc9e55fe2f"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalDynamicFilterNode::deserialize (cognitive 19): PhysicalDynamicFilterNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":19332}}}],"partialFingerprints":{"codehealthFindingId/v1":"18cf2d217aa6f47a2880e7ad02e366f9b098a98fb41894dd889f13b3f2e1a35d"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalBinaryExprNode::deserialize (cognitive 19): PhysicalBinaryExprNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18699}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0041212796469f79f8bb3704c064f078790c60547d5dd8fdc2d68dbc205c074"}},{"ruleId":"D2","level":"warning","message":{"text":"SortExecNode::deserialize (cognitive 19): SortExecNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":26494}}}],"partialFingerprints":{"codehealthFindingId/v1":"486fc3e6f79592cf98b7387360ebda299a3cb1c335de30a9a1e31463a5db3fb4"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedLoopJoinExecNode::deserialize (cognitive 19): NestedLoopJoinExecNode::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":16297}}}],"partialFingerprints":{"codehealthFindingId/v1":"249fb34665d56cc3bc72d89cdfd11b6f63a6aae582e4d6ed715fec7b6d94ef26"}},{"ruleId":"D2","level":"warning","message":{"text":"GenerateSeriesArgsInt64::deserialize (cognitive 19): GenerateSeriesArgsInt64::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":8920}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dbb63a9caff17062a9c03308a445b21071edf97680c6f36ca92fdc0becda775"}},{"ruleId":"D2","level":"warning","message":{"text":"GenerateSeriesArgsDate::deserialize (cognitive 19): GenerateSeriesArgsDate::deserialize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 11 other methods here (AnalyzeNode::deserialize, CreateViewNode::deserialize, CustomTableScanNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 12 times rather than 12 independent problems. Splitting this body alone leaves the other 11 exactly as they are. Where these are variations on one operation, the change that clears all 12 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":8748}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eaa21d8a521d6d348f2f9cf8fe430aefd81734a99f39a6f2c6d5e31c17b73dd"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::aggregate (cognitive 19): SqlToRel::aggregate has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (11 pts), loops 2 (4 pts), match/switch 2 (4 pts) (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":1223}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2ac2d4533ad9e32e00a613c4a0afdfb3de132b5518e3d2d575256c4e5122cdf"}},{"ruleId":"D2","level":"warning","message":{"text":"Unparser::asof_join_to_sql (cognitive 19): Unparser::asof_join_to_sql has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17 (19 pts) (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":1929}}}],"partialFingerprints":{"codehealthFindingId/v1":"42fbfaf3fc7c46e33da47ec3a318717c94aa5540b083e23c8979398d9fdd70a3"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_sqllogictest::util::df_value_validator (cognitive 19): datafusion_sqllogictest::util::df_value_validator has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (13 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/util.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec1f1726a6992e409c8c5b937c20510545b508801d3530fbad264863cbc4fef"}},{"ruleId":"D2","level":"warning","message":{"text":"Statistics::with_fetch (cognitive 18): Statistics::with_fetch has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (10 pts), match/switch 5 (6 pts), boolean chains 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"8026266f68a7a1c31b571b00648234935a70313083cf142e5a330d7d727fecb0"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::utils::normalize_float_zero (cognitive 18): datafusion_common::utils::normalize_float_zero has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (17 pts), match/switch 1 (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/utils/mod.rs"},"region":{"startLine":1449}}}],"partialFingerprints":{"codehealthFindingId/v1":"51f869b5630ff0bacbfd859af227e54c93d26c991a182a93c37e27abbe92eae1"}},{"ruleId":"D2","level":"warning","message":{"text":"AvroFileSink::spawn_writer_tasks_and_join (cognitive 18): AvroFileSink::spawn_writer_tasks_and_join has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (9 pts), match/switch 2 (5 pts), loops 3 (4 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-avro/src/file_format.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7f42e9d4d1cc212a0545c3da82fec73942d60f8420c1d385496b03ec4c2dd3b"}},{"ruleId":"D2","level":"warning","message":{"text":"RowGroupsPrunedParquetOpen::build_stream (cognitive 18): RowGroupsPrunedParquetOpen::build_stream has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10 (14 pts), match/switch 3, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/opener/mod.rs"},"region":{"startLine":1593}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cec40227715875de206b7b8ee197164c37e8593930a06b455e9635c550dc679"}},{"ruleId":"D2","level":"warning","message":{"text":"PredicateBoundsEvaluator::evaluate_bounds (cognitive 18): PredicateBoundsEvaluator::evaluate_bounds has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 6 (12 pts), if/else 4 (6 pts) (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/predicate_bounds.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff02298cd252902838d7ee45253956bb285f979e7936be59cefb5765c075e1b4"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::utils::map_lookup (cognitive 18): datafusion_functions::utils::map_lookup has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 4, match/switch 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/utils.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"82976a294f5cae187a9eb18fdd0aa0fc5149b44a445e4af5b40fc61c71c27923"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::string::concat::simplify_concat (cognitive 18): datafusion_functions::string::concat::simplify_concat has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 5 (10 pts), if/else 4 (6 pts), loops 2 (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat.rs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"8deed0adb7e5e674e0a56439fb97c2c3b9060cf8e56a63ae7df57ad424a0e149"}},{"ruleId":"D2","level":"warning","message":{"text":"FirstLastGroupsAccumulator::get_filtered_extreme_of_each_group (cognitive 18): FirstLastGroupsAccumulator::get_filtered_extreme_of_each_group has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (10 pts), boolean chains 7, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"f32af2f5298a86eeadb9bbd83712e0fd816326a13b6c03de117bc10b52448799"}},{"ruleId":"D2","level":"warning","message":{"text":"Range::gen_range_date (cognitive 18): Range::gen_range_date has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 5, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/range.rs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"5513d2af4650da4300162cce8ab6697736ab74944ea148f4ee1ce34f83ef8e12"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::extract::compute_slice_plan (cognitive 18): datafusion_functions_nested::extract::compute_slice_plan has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (9 pts), loops 2 (5 pts), boolean chains 4 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/extract.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb2039669cee5b115258e153934da7e5e0c46f9b2f83fab432ed99bd1b436f61"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::position::array_position_scalar (cognitive 18): datafusion_functions_nested::position::array_position_scalar has cognitive complexity 18 (threshold 15). Drivers by points: loops 4 (9 pts), if/else 5 (8 pts), boolean chains 1 (nesting depth added 8). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/position.rs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1174f738a041618c56708b15105a99f29868d26ef09828ae65de4b932c75888"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::string::string_to_array_column_args (cognitive 18): datafusion_functions_nested::string::string_to_array_column_args has cognitive complexity 18 (threshold 15). Drivers by points: if/else 3 (8 pts), loops 3 (8 pts), match/switch 1 (2 pts) (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecfdfe232216657677e4f3971675dd03f596d36e9be78b7d915954861ce5d79c"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::push_down_filter::infer_join_predicates_impl (cognitive 18): datafusion_optimizer::push_down_filter::infer_join_predicates_impl has cognitive complexity 18 (threshold 15). Drivers by points: if/else 3 (10 pts), loops 3 (6 pts), boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf1da4a78ddedd4d6a206fdb86c89a496ebd9a3b08e94a20f0dc2e4f348ed0c"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectionExprs::project_statistics_impl (cognitive 18): ProjectionExprs::project_statistics_impl has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (13 pts), match/switch 1 (4 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/projection.rs"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"49daf8624807bdec4555de42bd3e98edbbd8dae834da8128ef507de5d71b3acb"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectionMapping::try_new (cognitive 18): ProjectionMapping::try_new has cognitive complexity 18 (threshold 15). Drivers by points: if/else 3 (10 pts), loops 2 (5 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/projection.rs"},"region":{"startLine":1292}}}],"partialFingerprints":{"codehealthFindingId/v1":"f469cabbe758d06f9140ecc409662710f26d518215c516d8b17ee35ba731f286"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_expr_common::datum::compare_op_for_nested (cognitive 18): datafusion_physical_expr_common::datum::compare_op_for_nested has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 6 (11 pts), boolean chains 4, if/else 3 (nesting depth added 5). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/datum.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"abdab82c2b5641dc0680696df8df022216315b8a8864f95e4e70f066ef356a29"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_sorting::remove_corresponding_sort_from_sub_plan (cognitive 18): datafusion_physical_optimizer::ensure_requirements::enforce_sorting::remove_corresponding_sort_from_sub_plan has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (16 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/mod.rs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"423a18d842b6c645a0f583f1ba47c05bc3e3c27fbf711daf64bce74cfd6dc9b7"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupValuesColumn::scalarized_intern (cognitive 18): GroupValuesColumn::scalarized_intern has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (10 pts), loops 3 (6 pts), match/switch 1 (2 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"2749ee2df3da9102ecb9fc3fc0bf4d89436141a68c3f0fc1283232eb2851574a"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeRenderVisitor::render_top_layer (cognitive 18): TreeRenderVisitor::render_top_layer has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":1016}}}],"partialFingerprints":{"codehealthFindingId/v1":"7070f50180448b560344f2e1b1e78230f8b7172a717c5f2715487b26cebfcb94"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterExec::handle_child_pushdown_result (cognitive 18): FilterExec::handle_child_pushdown_result has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 4 (9 pts), if/else 7 (8 pts), boolean chains 1 (nesting depth added 6). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/filter.rs"},"region":{"startLine":738}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dba78b785147dd393da87dc88a46fc21c9ba676b5ca806dbaa3111ee68108d4"}},{"ruleId":"D2","level":"warning","message":{"text":"HashJoinExec::fmt_as (cognitive 18): HashJoinExec::fmt_as has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (17 pts), match/switch 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1454}}}],"partialFingerprints":{"codehealthFindingId/v1":"85e0b6fe21b7bec060cf3595fbbe7622974076975ff9355ccc72140701ba59b0"}},{"ruleId":"D2","level":"warning","message":{"text":"SpillPoolReader::poll_next (cognitive 18): SpillPoolReader::poll_next has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 3 (5 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/spill/spill_pool.rs"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea766f3dcf3b92aa874e5019e167ff13a19bbf3da1268a64b67e8d01b9fc284"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundedWindowAggStream::prune_partition_batches (cognitive 18): BoundedWindowAggStream::prune_partition_batches has cognitive complexity 18 (threshold 15). Drivers by points: loops 7 (11 pts), if/else 3 (7 pts) (nesting depth added 8). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":1413}}}],"partialFingerprints":{"codehealthFindingId/v1":"16b3462b50ef02599b2108cb78f34e0dfccab0bea50786bac4d090b744cc4309"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinNode::serialize (cognitive 18): JoinNode::serialize has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: 3 other methods here (AnalyzeExecNode::serialize, FileSinkConfig::serialize, SymmetricHashJoinExecNode::serialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":11529}}}],"partialFingerprints":{"codehealthFindingId/v1":"167d58f55e76a05d85180e222962f6866ac54ce21fa1f4275750858d56cd23b4"}},{"ruleId":"D2","level":"warning","message":{"text":"FileSinkConfig::serialize (cognitive 18): FileSinkConfig::serialize has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: 3 other methods here (AnalyzeExecNode::serialize, JoinNode::serialize, SymmetricHashJoinExecNode::serialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":7962}}}],"partialFingerprints":{"codehealthFindingId/v1":"e617033e90f918de6c8101e12d752bd0bb6c0e8764840c9ccee396a271c65943"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalAggregateExprNode::serialize (cognitive 18): PhysicalAggregateExprNode::serialize has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, match/switch 1 (2 pts) (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18325}}}],"partialFingerprints":{"codehealthFindingId/v1":"89b72017a178bd427898bbfe3662895e5ef41bdbea8ae8ec001510148e38524d"}},{"ruleId":"D2","level":"warning","message":{"text":"SymmetricHashJoinExecNode::serialize (cognitive 18): SymmetricHashJoinExecNode::serialize has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: 3 other methods here (AnalyzeExecNode::serialize, FileSinkConfig::serialize, JoinNode::serialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":27708}}}],"partialFingerprints":{"codehealthFindingId/v1":"0998e42fc552ff272c7e20dc9dab17b0e513576fccb3a8b55242961abbe34378"}},{"ruleId":"D2","level":"warning","message":{"text":"AnalyzeExecNode::serialize (cognitive 18): AnalyzeExecNode::serialize has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: 3 other methods here (FileSinkConfig::serialize, JoinNode::serialize, SymmetricHashJoinExecNode::serialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":995}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc7f553cef77e6df955e05eea9e7113ad08bc5e58a1c6e193b46721b4b209080"}},{"ruleId":"D2","level":"warning","message":{"text":"ConversionSpecifier::format_unsigned (cognitive 18): ConversionSpecifier::format_unsigned has cognitive complexity 18 (threshold 15). Drivers by points: loops 3 (9 pts), if/else 7 (8 pts), match/switch 1 (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1833}}}],"partialFingerprints":{"codehealthFindingId/v1":"c593e37f7cbb2fb45a0fb9712af922aa7fa436d46706a163d694332b2bf11942"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::string::format_string::take_conversion_specifier (cognitive 18): datafusion_spark::function::string::format_string::take_conversion_specifier has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (14 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":727}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a660b7a2c12f0646acde91ad7a94d411eae6d26da2d88511fdfa8249cb8c18"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::sql_expr_to_logical_expr_internal (cognitive 18): SqlToRel::sql_expr_to_logical_expr_internal has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 7 (12 pts), if/else 2 (4 pts), loops 1 (2 pts) (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"afdfe72b427d6a4f8297f0844ce0eb86508a3168d49fe9dfa7a14dc4e40abfb5"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::set_statement_to_plan (cognitive 18): SqlToRel::set_statement_to_plan has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 4 (9 pts), if/else 4 (8 pts), boolean chains 1 (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":2266}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0cdf4b91fd3943b2f50fb60d5f3b09741ca8fb22cb93cf3b1e8de710f6b9a8a"}},{"ruleId":"D2","level":"warning","message":{"text":"Unparser::try_projection_unnest_as_lateral_flatten (cognitive 18): Unparser::try_projection_unnest_as_lateral_flatten has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (16 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3a494d40649eb682fa6d482326d1561270c488cadc0ff38998693e39c54244b"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_substrait::logical_plan::consumer::plan::from_substrait_plan_with_consumer (cognitive 18): datafusion_substrait::logical_plan::consumer::plan::from_substrait_plan_with_consumer has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 4 (10 pts), if/else 2 (8 pts) (nesting depth added 12). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/plan.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"d69f84ed8e66b3c8b940881a0f114d8793289a210e7f9500e95c23bbd6bfc18e"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_cli::main_inner (cognitive 18): datafusion_cli::main_inner has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (15 pts), match/switch 2 (3 pts) (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/main.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"755b4d5c11cc18289e8afba11b09384ea1ac296d1895c3a9f274eac7e8b05162"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_cli::object_storage::get_s3_object_store_builder_inner (cognitive 18): datafusion_cli::object_storage::get_s3_object_store_builder_inner has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (16 pts), boolean chains 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/object_storage.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"018f005d2bd84da0a57f2263e9abd91d7d81a4cf5d529ca946c7a09eca8968f0"}},{"ruleId":"D2","level":"warning","message":{"text":"check_asf_yaml_status_checks.main (cognitive 18): check_asf_yaml_status_checks.main has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (13 pts), loops 2 (3 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ci/scripts/check_asf_yaml_status_checks.py"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"910e51aea9c4548e1523e0abab405f4f5805a220e50c4e66e2c0106c2f917d9a"}},{"ruleId":"D2","level":"warning","message":{"text":"ListingTable::scan_with_args_inner (cognitive 17): ListingTable::scan_with_args_inner has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (12 pts), match/switch 2 (3 pts), boolean chains 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/table.rs"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"90aec96488e558c6c1fd1be7e568381b161f2a18495330398d61fc983f80d73d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::utils::truncate_list_nulls (cognitive 17): datafusion_common::utils::truncate_list_nulls has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (10 pts), loops 1 (3 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/utils/mod.rs"},"region":{"startLine":1310}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad2b9f3cf6b10bfd927a442d6c00e6b2f8ddad980b8c1378afebcbe761577322"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_datasource_parquet::page_filter::limit_pruned_plan (cognitive 17): datafusion_datasource_parquet::page_filter::limit_pruned_plan has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), match/switch 1 (3 pts), loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/page_filter.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfabc401b3f59b6918b866c72846484c53fb8a10cfae382cce482791b3f1c13a"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::math::trunc::trunc (cognitive 17): datafusion_functions::math::trunc::trunc has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (11 pts), match/switch 3 (5 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/trunc.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b8f65fe0834323c50488a2277ac1bf0b6585bf198f4cc140ce2c9aa0d3c5ea0"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::string::chr::chr_array (cognitive 17): datafusion_functions::string::chr::chr_array has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/chr.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"e915bba84d24b592c93a3ec741507323416e9d239492ae8ccf88fd2d8b2ca8f0"}},{"ruleId":"D2","level":"warning","message":{"text":"OrderSensitiveArrayAggAccumulator::store_batch (cognitive 17): OrderSensitiveArrayAggAccumulator::store_batch has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (12 pts), boolean chains 4, match/switch 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":1486}}}],"partialFingerprints":{"codehealthFindingId/v1":"adb86d37688051825af8e635408c1d45e0aeacf299389408870d8a4bc54cb99a"}},{"ruleId":"D2","level":"warning","message":{"text":"MinMaxBytesState::update_batch (cognitive 17): MinMaxBytesState::update_batch has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (13 pts), loops 2, match/switch 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max/min_max_bytes.rs"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab33bc9ecb8f51a155cff5895dd6e9b8c405855e812a2cfddf3f3d545ebb77a2"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_nested::remove::general_remove_with_scalar (cognitive 17): datafusion_functions_nested::remove::general_remove_with_scalar has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (14 pts), loops 2 (3 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/remove.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f2d9813cd25ecb2c020dece6bccb35051d40c724053a66ba0774ed2a3fb6b6a"}},{"ruleId":"D2","level":"warning","message":{"text":"EliminateCrossJoin::rewrite (cognitive 17): EliminateCrossJoin::rewrite has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (12 pts), match/switch 2 (4 pts), loops 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/eliminate_cross_join.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d40339ef2561e1037eb1cabf9a59f529fc470e3de77f3ce375b607c0085a228"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterNullJoinKeys::rewrite (cognitive 17): FilterNullJoinKeys::rewrite has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (11 pts), boolean chains 3, loops 1 (2 pts), match/switch 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/filter_null_join_keys.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"470084e2e9a4287d248c76d435347b53c726473be88b8cc785e8d2a58bc25cc9"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::decorrelate::filter_exprs_evaluation_result_on_empty_batch (cognitive 17): datafusion_optimizer::decorrelate::filter_exprs_evaluation_result_on_empty_batch has cognitive complexity 17 (threshold 15). Drivers by points: loops 3 (8 pts), if/else 6 (7 pts), match/switch 1 (2 pts) (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate.rs"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"311e896a994e581b1449082d0b9a16cb58040dc5da72766a04046bf4fea1d20d"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::analyzer::type_coercion::coerce_window_frame (cognitive 17): datafusion_optimizer::analyzer::type_coercion::coerce_window_frame has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (10 pts), match/switch 2 (4 pts), boolean chains 3 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c71c7651d516501ee6a899a5a4a550cfd773f4baa0696fe931ecf820589dcbb"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateFunctionExpr::reverse_expr_inner (cognitive 17): AggregateFunctionExpr::reverse_expr_inner has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (14 pts), boolean chains 2, match/switch 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/aggregate.rs"},"region":{"startLine":979}}}],"partialFingerprints":{"codehealthFindingId/v1":"97ee5601899a66746e61c408a476e8849415ef372d32ab956d64c33f9f70ed27"}},{"ruleId":"D2","level":"warning","message":{"text":"ExprStatisticsGraph::propagate_statistics (cognitive 17): ExprStatisticsGraph::propagate_statistics has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (13 pts), loops 2 (4 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/statistics/stats_solver.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbbdcd00bdfc54756db00227b477d2424b6d8b548ae9c125344555fc6ed88a70"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_optimizer::ensure_requirements::enforce_sorting::remove_bottleneck_in_subplan_impl (cognitive 17): datafusion_physical_optimizer::ensure_requirements::enforce_sorting::remove_bottleneck_in_subplan_impl has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (10 pts), boolean chains 5, loops 1 (2 pts) (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/mod.rs"},"region":{"startLine":646}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d51752d8bb4166c2e4e440c948a7abc29774990d29773d2546df0e8c2a75648"}},{"ruleId":"D2","level":"warning","message":{"text":"NestedLoopJoinStream::handle_emit_left_unmatched_memory_limited (cognitive 17): NestedLoopJoinStream::handle_emit_left_unmatched_memory_limited has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 7 (13 pts), if/else 3, boolean chains 1 (nesting depth added 6). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":2893}}}],"partialFingerprints":{"codehealthFindingId/v1":"e35c89d79fcd0349af8340e151117c3c6f111759ef89cd455bac3bfe9b37a594"}},{"ruleId":"D2","level":"warning","message":{"text":"BitwiseSortMergeJoinStream::process_key_match_with_filter (cognitive 17): BitwiseSortMergeJoinStream::process_key_match_with_filter has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 2 (4 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"be052cf6b09aa831b1d9b07782e6be0ee93d84c7cc1019cfaa66d8d76cc78c07"}},{"ruleId":"D2","level":"warning","message":{"text":"UnnestStream::poll_next_impl (cognitive 17): UnnestStream::poll_next_impl has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/unnest.rs"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d0014605a2981faa50ee06ff6f6dcd4d39f5ef5da7b479368a1d9544a0e5af"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::aggregates::group_values::new_group_values (cognitive 17): datafusion_physical_plan::aggregates::group_values::new_group_values has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 4 (11 pts), if/else 5 (6 pts) (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/mod.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"79702350092f132d685d7d3e8dc8cdad9a628d7ab2d406a44add0025322b5a36"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_plan::joins::utils::estimate_disjoint_inputs (cognitive 17): datafusion_physical_plan::joins::utils::estimate_disjoint_inputs has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (12 pts), boolean chains 4, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":870}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8909e72bf0de052a66055bec7cff13c06a0147e0d422149f8f4ea307de7bf93"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatStringFunc::invoke_with_args (cognitive 17): FormatStringFunc::invoke_with_args has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 6 (10 pts), loops 2 (4 pts), if/else 2 (3 pts) (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ae7e7ea9d6dabf3fb830d8a4538c1d4f39372ace460345767c4c57c2334690"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::string::encode::encode_string (cognitive 17): datafusion_spark::function::string::encode::encode_string has cognitive complexity 17 (threshold 15). Drivers by points: loops 5 (10 pts), if/else 4 (6 pts), match/switch 1 (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/encode.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"b481043035e7c044fd53f8a1b308287512fc286364df22376fbe3fe3f2263f16"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_spark::function::conversion::cast::float_secs_to_micros (cognitive 17): datafusion_spark::function::conversion::cast::float_secs_to_micros has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/conversion/cast.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0479e5c52212fb861aa478d341f79b04d10248da64d96dc6a41dfe5a84547d2"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::create_default_relation (cognitive 17): SqlToRel::create_default_relation has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 3 (6 pts) (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/relation/mod.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd4f02a947902f37c1e2daa07ddc6483dae692f4bc4b396b39fb71f27a06592d"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::rewrite_unnest_expr_groups (cognitive 17): SqlToRel::rewrite_unnest_expr_groups has cognitive complexity 17 (threshold 15). Drivers by points: if/else 3 (9 pts), loops 4 (8 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc237df11a32ec5ef5cda33af436096bd48187f21c8e2f769d52d550078790c4"}},{"ruleId":"D2","level":"warning","message":{"text":"DerivedRelationBuilder::build (cognitive 17): DerivedRelationBuilder::build has cognitive complexity 17 (threshold 15). Drivers by points: if/else 3 (8 pts), match/switch 3 (6 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/ast.rs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"268ec72080acc6b12b04629088bcedeea34efe2ff3ad85ac1f77071e6aa08441"}},{"ruleId":"D2","level":"warning","message":{"text":"Unparser::interval_scalar_to_sql (cognitive 17): Unparser::interval_scalar_to_sql has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (10 pts), match/switch 3 (5 pts), boolean chains 2 (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":1696}}}],"partialFingerprints":{"codehealthFindingId/v1":"4da78180c56ee433ee02709b5a82e1cfd020e75781f7608f262f21da4751e3ec"}},{"ruleId":"D2","level":"warning","message":{"text":"Unparser::peel_to_unnest_with_modifiers (cognitive 17): Unparser::peel_to_unnest_with_modifiers has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (11 pts), boolean chains 3, match/switch 2 (3 pts) (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":2077}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1c22a366ed40b412634095d993f4311e9307013e95d74815e1795172d41bf39"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_sql::utils::check_columns_satisfy_exprs (cognitive 17): datafusion_sql::utils::check_columns_satisfy_exprs has cognitive complexity 17 (threshold 15). Drivers by points: loops 5 (14 pts), match/switch 2 (3 pts) (nesting depth added 10). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/utils.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f1cb034f650a4cc1df01169bbf150be6b1ee69d547a472be6fac483f5bb2843"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_sqllogictest::bin::sqllogictests::run_file_in_runner (cognitive 17): datafusion_sqllogictest::bin::sqllogictests::run_file_in_runner has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (14 pts), loops 2 (3 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/bin/sqllogictests.rs"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad954768de211e763a5fbd961a85f7fdf1ec6a54159fddac081ca8a3c5d1f241"}},{"ruleId":"D2","level":"warning","message":{"text":"generate-changelog.generate_changelog (cognitive 17): generate-changelog.generate_changelog has cognitive complexity 17 (threshold 15). Drivers by points: if/else 4 (8 pts), boolean chains 5, loops 3 (4 pts) (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dev/release/generate-changelog.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c740094639dde464b21ca00c11c451c2fa32915ddcca91dc5e4c748e8aff55"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::build_hasher::hash_array_primitive_with_hasher (cognitive 16): datafusion_common::hash_utils::build_hasher::hash_array_primitive_with_hasher has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (10 pts), if/else 5 (6 pts) (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This shape REPEATS in the file: one other method here (datafusion_common::hash_utils::build_hasher::hash_array_with_hasher) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils/build_hasher.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec68ea4246a9c52c2412485a44ce67a2a711a8f34a7d05dd65a0dfea5c512464"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::build_hasher::hash_array_with_hasher (cognitive 16): datafusion_common::hash_utils::build_hasher::hash_array_with_hasher has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (10 pts), if/else 5 (6 pts) (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This shape REPEATS in the file: one other method here (datafusion_common::hash_utils::build_hasher::hash_array_primitive_with_hasher) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils/build_hasher.rs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"0605707864af7119e0682dbb9817fcc2af38a8420b8dc6c392f56482979f9afd"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::hash_array_primitive (cognitive 16): datafusion_common::hash_utils::hash_array_primitive has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (10 pts), if/else 5 (6 pts) (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This shape REPEATS in the file: one other method here (datafusion_common::hash_utils::hash_array) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"22963671e9127d2ab97f38037fc8c36248f7cbac011c94fc43b2ef1c114169cf"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::hash_array (cognitive 16): datafusion_common::hash_utils::hash_array has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (10 pts), if/else 5 (6 pts) (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This shape REPEATS in the file: one other method here (datafusion_common::hash_utils::hash_array_primitive) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"58ce97e16d517f0e14972678be84e889696bc5e6b5d1eec49f5f1283473b3471"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::hash_map_array (cognitive 16): datafusion_common::hash_utils::hash_map_array has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (11 pts), if/else 3 (5 pts) (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This shape REPEATS in the file: 3 other methods here (datafusion_common::hash_utils::hash_list_array, datafusion_common::hash_utils::hash_list_view_array, datafusion_common::hash_utils::hash_fixed_list_array) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f1421a71ab162ef9964c0ace593338d5d56e133e3cc6bbd1b3cb025b776c4ad"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::hash_list_array (cognitive 16): datafusion_common::hash_utils::hash_list_array has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (11 pts), if/else 3 (5 pts) (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This shape REPEATS in the file: 3 other methods here (datafusion_common::hash_utils::hash_map_array, datafusion_common::hash_utils::hash_list_view_array, datafusion_common::hash_utils::hash_fixed_list_array) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"276eaf918fd0048b80e21dca00133b37eea78c5468f5d61ed5348f59a6e6f68a"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::hash_list_view_array (cognitive 16): datafusion_common::hash_utils::hash_list_view_array has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (11 pts), if/else 3 (5 pts) (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This shape REPEATS in the file: 3 other methods here (datafusion_common::hash_utils::hash_map_array, datafusion_common::hash_utils::hash_list_array, datafusion_common::hash_utils::hash_fixed_list_array) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":780}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4a0d6d7f19db576e55992bc1b2732df228c63ff84d9195bcfc23e247950df19"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_common::hash_utils::hash_fixed_list_array (cognitive 16): datafusion_common::hash_utils::hash_fixed_list_array has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (11 pts), if/else 3 (5 pts) (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This shape REPEATS in the file: 3 other methods here (datafusion_common::hash_utils::hash_map_array, datafusion_common::hash_utils::hash_list_array, datafusion_common::hash_utils::hash_list_view_array) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":947}}}],"partialFingerprints":{"codehealthFindingId/v1":"55a073fad321a78728171362bf837a70fcf55aafae74e664e9c9fa4dd2958a46"}},{"ruleId":"D2","level":"warning","message":{"text":"BloomFilterStatistics::check_scalar (cognitive 16): BloomFilterStatistics::check_scalar has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/bloom_filter.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"99e45d554024c579608c6158db69a767199db7e063a59210eb17c68345775c19"}},{"ruleId":"D2","level":"warning","message":{"text":"LogicalPlan::max_rows (cognitive 16): LogicalPlan::max_rows has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 5 (10 pts), if/else 4 (6 pts) (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":1446}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f5a873265a9ab5e45dd0a845b4812b23b7d9036e8eb1a22fbca0a727398002a"}},{"ruleId":"D2","level":"warning","message":{"text":"BinaryTypeCoercer::signature_inner (cognitive 16): BinaryTypeCoercer::signature_inner has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (12 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 4). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc6569dc67bedbabbcf00c75874f471d52b651a749c6d02a679af667cbe5cef4"}},{"ruleId":"D2","level":"warning","message":{"text":"GetFieldFunc::return_field_from_args (cognitive 16): GetFieldFunc::return_field_from_args has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (10 pts), match/switch 2 (5 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/getfield.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb35c54b8f4cd0c31e72dc95e011f2f9ffcfabcdb3a45c0be8397264bd37d8d2"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::unicode::lpad::lpad_scalar_ascii (cognitive 16): datafusion_functions::unicode::lpad::lpad_scalar_ascii has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (11 pts), loops 2 (3 pts), match/switch 1 (2 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9db7bda75053de0d62711c48a615786f09bfcc60659278a31bfa240bb85a00a"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions::unicode::rpad::rpad_scalar_ascii (cognitive 16): datafusion_functions::unicode::rpad::rpad_scalar_ascii has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (11 pts), loops 2 (3 pts), match/switch 1 (2 pts) (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/rpad.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"abaaff70ce55923267eb1fa76c027529955b23dcb909b872f423d3238c3b12f1"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayAggGroupsAccumulator::compact_retained_state (cognitive 16): ArrayAggGroupsAccumulator::compact_retained_state has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (10 pts), loops 3 (6 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3579c57580309f4020a4e3a7e2f2dcbbe4de9a35bcc7426e56c149a2b4fa8ff"}},{"ruleId":"D2","level":"warning","message":{"text":"FirstLastGroupsAccumulator::update_batch_pre_ordered (cognitive 16): FirstLastGroupsAccumulator::update_batch_pre_ordered has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (9 pts), boolean chains 4, loops 3 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"20db6c94a5c58987ec6148d6e99c284b7d5a47272258448c3b15db1ba15286f4"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_functions_aggregate::percentile_cont::create_percentile_accumulator (cognitive 16): datafusion_functions_aggregate::percentile_cont::create_percentile_accumulator has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (15 pts), match/switch 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/percentile_cont.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"a58ed1b10ef371d5ace288e4c2351afafc0df910ecb1c50d930c17e0a3cb808e"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_optimizer::decorrelate_predicate_subquery::build_join (cognitive 16): datafusion_optimizer::decorrelate_predicate_subquery::build_join has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (10 pts), boolean chains 2, loops 1 (2 pts), match/switch 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate_predicate_subquery.rs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eefab16e533803378d3f4a5e07bed1affe9fd14b3fd002ecb443faeeb36b948"}},{"ruleId":"D2","level":"warning","message":{"text":"datafusion_physical_expr_common::utils::scatter_bits (cognitive 16): datafusion_physical_expr_common::utils::scatter_bits has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), loops 3 (7 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/utils.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e977d30b94b3a029b4488cddfdef90474afe77ca4d2c14cd9469753e5fc481f"}},{"ruleId":"D2","level":"warning","message":{"text":"TopKAggregation::transform_sort (cognitive 16): TopKAggregation::transform_sort has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 2 (4 pts), loops 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/topk_aggregation.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b8298866a45f2eee8827de10627852dd47d8ac82bb04c91017a1563557dc72b"}},{"ruleId":"D2","level":"warning","message":{"text":"TopKRepartition::optimize (cognitive 16): TopKRepartition::optimize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13 (15 pts), loops 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/topk_repartition.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d8123e240cbbb46b60443b68ba20179419ac4b727dc6f0c0202898bf7a1850d"}},{"ruleId":"D2","level":"warning","message":{"text":"GroupedHashAggregateStream::group_aggregate_batch (cognitive 16): GroupedHashAggregateStream::group_aggregate_batch has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (12 pts), loops 2 (3 pts), boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":861}}}],"partialFingerprints":{"codehealthFindingId/v1":"6687116f4dc228d34b4b61c0c882affab2f3c317149bacee54e7886f7d9e0b07"}},{"ruleId":"D2","level":"warning","message":{"text":"FilterExecStream::poll_next (cognitive 16): FilterExecStream::poll_next has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 4 (11 pts), if/else 2 (4 pts), loops 1 (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/filter.rs"},"region":{"startLine":1425}}}],"partialFingerprints":{"codehealthFindingId/v1":"93ae55252d8830f5c5944fc811495855f23df671e91ec1c5b6e3907a0149dad2"}},{"ruleId":"D2","level":"warning","message":{"text":"SharedBuildAccumulator::build_partitioned_filter (cognitive 16): SharedBuildAccumulator::build_partitioned_filter has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (10 pts), boolean chains 3, match/switch 1 (2 pts), loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/shared_bounds.rs"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaf2402429e4ef312cc3abde4f4fb3bb34b4109db0f2d66d1aedb7b1d0af4d68"}},{"ruleId":"D2","level":"warning","message":{"text":"AggregateStatisticsProvider::compute_statistics (cognitive 16): AggregateStatisticsProvider::compute_statistics has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (11 pts), match/switch 2 (3 pts), boolean chains 1, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/operator_statistics/mod.rs"},"region":{"startLine":752}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba131b1375d64644ede974933095062aba50f9d5084c3bdc8bfdea29941676a8"}},{"ruleId":"D2","level":"warning","message":{"text":"JoinStatisticsProvider::compute_statistics (cognitive 16): JoinStatisticsProvider::compute_statistics has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 3, match/switch 2 (3 pts), loops 1 (nesting depth added 1). Of this number, 11 points are the body\u0027s own statements and 5 belong to one function item inside it that branches. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/operator_statistics/mod.rs"},"region":{"startLine":847}}}],"partialFingerprints":{"codehealthFindingId/v1":"bee469a2349058928b1e5fd21bf0da3b64875378cebfa17bc9154864b3ac1ed2"}},{"ruleId":"D2","level":"warning","message":{"text":"RepartitionExec::try_swapping_with_projection (cognitive 16): RepartitionExec::try_swapping_with_projection has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (10 pts), loops 2 (4 pts), boolean chains 1, match/switch 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/mod.rs"},"region":{"startLine":1942}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f497c9017d36f9d1e3426501af93e9c9e9423d33485bfecc0ee949aefe1ce7e"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionedTopKDenseRank::emit (cognitive 16): PartitionedTopKDenseRank::emit has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (10 pts), if/else 2 (6 pts) (nesting depth added 10). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":2366}}}],"partialFingerprints":{"codehealthFindingId/v1":"143f8571aec077c5b3cab30c8c010206150dbc03d1f2207eed47e16b052e173f"}},{"ruleId":"D2","level":"warning","message":{"text":"ScalarNestedValue::deserialize (cognitive 16): ScalarNestedValue::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 3 other methods here (JsonOptions::deserialize, ParquetCdcOptions::deserialize, UnionValue::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":7892}}}],"partialFingerprints":{"codehealthFindingId/v1":"a01c099cfd70690e90c9705ebaf2b0cb1353657c610d308ba9ceb3bf98432ad4"}},{"ruleId":"D2","level":"warning","message":{"text":"UnionValue::deserialize (cognitive 16): UnionValue::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 3 other methods here (JsonOptions::deserialize, ParquetCdcOptions::deserialize, ScalarNestedValue::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":10340}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c1a6c6c46cd0469d5a019ba996aee085ad2d3dcd0e10445e1f53ebdde0baff2"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonOptions::deserialize (cognitive 16): JsonOptions::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 3 other methods here (ParquetCdcOptions::deserialize, ScalarNestedValue::deserialize, UnionValue::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":5104}}}],"partialFingerprints":{"codehealthFindingId/v1":"1abdf0f520874b8013d0b515502f5a48e5b2d64ad89b08a785d1a787c641608e"}},{"ruleId":"D2","level":"warning","message":{"text":"ParquetCdcOptions::deserialize (cognitive 16): ParquetCdcOptions::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 3 other methods here (JsonOptions::deserialize, ScalarNestedValue::deserialize, UnionValue::deserialize) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 4 times rather than 4 independent problems. Splitting this body alone leaves the other 3 exactly as they are. Where these are variations on one operation, the change that clears all 4 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/generated/pbjson.rs"},"region":{"startLine":5882}}}],"partialFingerprints":{"codehealthFindingId/v1":"67e135ecc0530bc58465b14cef24a31cd6eddade0258cba6a2d43793bc280663"}},{"ruleId":"D2","level":"warning","message":{"text":"Precision::from (cognitive 16): Precision::from has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (Precision::from) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"4734cc3f974a97de73f89de22eaba8118cfe19ff8a222ddd53e4ba7586285efc"}},{"ruleId":"D2","level":"warning","message":{"text":"Precision::from (cognitive 16): Precision::from has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: one other method here (Precision::from) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":844}}}],"partialFingerprints":{"codehealthFindingId/v1":"713cd2a344074e7f30561bf1e4870195764bb239f9779c9340d1e056427a79c6"}},{"ruleId":"D2","level":"warning","message":{"text":"RepartitionNode::deserialize (cognitive 16): RepartitionNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":25489}}}],"partialFingerprints":{"codehealthFindingId/v1":"67ac89c54d052bc3f94adae35d9ca548d01abf931004eeccfb4f0ce98cb0d6a1"}},{"ruleId":"D2","level":"warning","message":{"text":"PrepareNode::deserialize (cognitive 16): PrepareNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":24200}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a0f6edfc76806a046d0c1081bd7e874fcbd4069bdea1eac453da1b5705d6de"}},{"ruleId":"D2","level":"warning","message":{"text":"ExplainNode::deserialize (cognitive 16): ExplainNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":7046}}}],"partialFingerprints":{"codehealthFindingId/v1":"aceab13be1e48b361ba64b8380c14e925763c20af160194ded328af5856d361c"}},{"ruleId":"D2","level":"warning","message":{"text":"AsOfJoinNode::serialize (cognitive 16): AsOfJoinNode::serialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (SortMergeJoinExecNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":1873}}}],"partialFingerprints":{"codehealthFindingId/v1":"1590fb5860f19af34ed26d7c0c1c4eb1172d46be2ed228af973fc5618d789cd1"}},{"ruleId":"D2","level":"warning","message":{"text":"DistinctOnNode::deserialize (cognitive 16): DistinctOnNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":6049}}}],"partialFingerprints":{"codehealthFindingId/v1":"8608ff9ced091e45b62501210c3e1d0101272025a07b8cc2515d6fbd8c952462"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyToNode::deserialize (cognitive 16): CopyToNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":3911}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a66ccdd16b8cf58068b77b36d1c7f1c31eb94d948b447cbd69a3e5b9935f051"}},{"ruleId":"D2","level":"warning","message":{"text":"PlaceholderNode::deserialize (cognitive 16): PlaceholderNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":23693}}}],"partialFingerprints":{"codehealthFindingId/v1":"133ccea8817d562c3e1d1c7fa0e7f7b9a0ddeb9f90170caedf1433feb1ad4f64"}},{"ruleId":"D2","level":"warning","message":{"text":"AliasNode::deserialize (cognitive 16): AliasNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (BetweenNode::deserialize, CastNode::deserialize, CopyToNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":887}}}],"partialFingerprints":{"codehealthFindingId/v1":"427021cff70db6da828ff5c94ab05ec5568d0c7cb0e9d1b6cb7d00d006593f1c"}},{"ruleId":"D2","level":"warning","message":{"text":"BetweenNode::deserialize (cognitive 16): BetweenNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, CastNode::deserialize, CopyToNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":2519}}}],"partialFingerprints":{"codehealthFindingId/v1":"356b2339564e7f3fe98ab0a6bfbac0c9b8574f665926c037d4e7ade3bd1fdfff"}},{"ruleId":"D2","level":"warning","message":{"text":"LikeNode::deserialize (cognitive 16): LikeNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":12491}}}],"partialFingerprints":{"codehealthFindingId/v1":"a88abb047940967e52849fa2313cc01b4b2889d3643488ac31a181e5d989ec57"}},{"ruleId":"D2","level":"warning","message":{"text":"ILikeNode::deserialize (cognitive 16): ILikeNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":10278}}}],"partialFingerprints":{"codehealthFindingId/v1":"5178c571046e6e2ed87acbfb096c104307a0c444a02007adb8a678d16805fe0e"}},{"ruleId":"D2","level":"warning","message":{"text":"SimilarToNode::deserialize (cognitive 16): SimilarToNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":26343}}}],"partialFingerprints":{"codehealthFindingId/v1":"47bc753684b45086a608407410bd5cc1470931ecab26413e9255117ad670369e"}},{"ruleId":"D2","level":"warning","message":{"text":"CastNode::deserialize (cognitive 16): CastNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CopyToNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":3008}}}],"partialFingerprints":{"codehealthFindingId/v1":"994254f070ca854cc6554b14e6751e2629c81a9dca641050b91cfb00d260542b"}},{"ruleId":"D2","level":"warning","message":{"text":"TryCastNode::deserialize (cognitive 16): TryCastNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":28104}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b68f7678bda832841cb659de7ac8dc6e3b8735d4ac932db4dfbda2394ea8a0"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonSinkExecNode::deserialize (cognitive 16): JsonSinkExecNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":12131}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba683a326b347380c239ef06496f2589610f08581d65dd14cd1b00d0205587db"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvSinkExecNode::deserialize (cognitive 16): CsvSinkExecNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":5379}}}],"partialFingerprints":{"codehealthFindingId/v1":"932ff964bc7e53d659259599d2c35df9605051954455c72903d6fc147ac30be9"}},{"ruleId":"D2","level":"warning","message":{"text":"ParquetSinkExecNode::deserialize (cognitive 16): ParquetSinkExecNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":17112}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc3a9fba589158955c81595b1e050131319d2a6ea754dcaa0aec3ced3c3b7c00"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalLikeExprNode::deserialize (cognitive 16): PhysicalLikeExprNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":21075}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a3fb7af147fb3215e44959ffe0259677bd5a5a7255416ff6be51ede1e1ccb68"}},{"ruleId":"D2","level":"warning","message":{"text":"GlobalLimitExecNode::deserialize (cognitive 16): GlobalLimitExecNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":9516}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6d10beb7cf3d5985a56ffac9e1bd4b72b55afd391948a8d05bfb104173549d2"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalRangePartitioning::deserialize (cognitive 16): PhysicalRangePartitioning::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":22139}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f827cfc8639998a38a487e1dc084a13a7d4c73a9e7aa10e5f239175b056fc50"}},{"ruleId":"D2","level":"warning","message":{"text":"Partitioning::deserialize (cognitive 16): Partitioning::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":18222}}}],"partialFingerprints":{"codehealthFindingId/v1":"2984a51cb6292acc41b8d47882080a24aabb80983035655fdc6bce2505a3f280"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionStats::deserialize (cognitive 16): PartitionStats::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":17867}}}],"partialFingerprints":{"codehealthFindingId/v1":"3de16c41e25d1578518ea309c0d879ad7f8ce40eefff5b3ff013b945aeb27291"}},{"ruleId":"D2","level":"warning","message":{"text":"RecursiveQueryNode::deserialize (cognitive 16): RecursiveQueryNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":25218}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea764538068b415d2b99ab61ddcb77db33ba82f9c0579bc453fa373aa4c3343"}},{"ruleId":"D2","level":"warning","message":{"text":"EmptyTableScanNode::deserialize (cognitive 16): EmptyTableScanNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":6775}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a9bcbe33bb5f8b854f14d7573ea8b8e650b8a3d230aaab917021cb5cfc215d8"}},{"ruleId":"D2","level":"warning","message":{"text":"SortMergeJoinExecNode::serialize (cognitive 16): SortMergeJoinExecNode::serialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This shape REPEATS in the file: one other method here (AsOfJoinNode::serialize) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":26833}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7fbfd526a4fbca50ac3422f2637d50c880b309ead4d518960c3ebf2390b34a8"}},{"ruleId":"D2","level":"warning","message":{"text":"PhysicalScalarSubqueryExprNode::deserialize (cognitive 16): PhysicalScalarSubqueryExprNode::deserialize has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body. This shape REPEATS in the file: 23 other methods here (AliasNode::deserialize, BetweenNode::deserialize, CastNode::deserialize, \u2026) have the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written 24 times rather than 24 independent problems. Splitting this body alone leaves the other 23 exactly as they are. Where these are variations on one operation, the change that clears all 24 is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":22378}}}],"partialFingerprints":{"codehealthFindingId/v1":"050fce785a8e237b881a50344379a88affc99f85f58fbc5fa28606fa465377fd"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionArgs::try_new (cognitive 16): FunctionArgs::try_new has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (12 pts), match/switch 2 (3 pts), loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"be5dc64f0868917ad0cd047b53165209e9b1ac16e0f0633b57c1978393e1bf1b"}},{"ruleId":"D2","level":"warning","message":{"text":"SqlToRel::validate_schema_satisfies_exprs (cognitive 16): SqlToRel::validate_schema_satisfies_exprs has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 3 (5 pts) (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/planner.rs"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"5146e760c907570597a72ac122fa0e7907cbb7126e4d6d3d0a86178b87decdce"}},{"ruleId":"D2","level":"warning","message":{"text":"Unparser::reconstruct_select_statement (cognitive 16): Unparser::reconstruct_select_statement has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10 (13 pts), boolean chains 2, match/switch 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"51fb5db0f0da793ca905258920facdcaafe2b64bbc9eb8a04ecb074e30d1e3ce"}},{"ruleId":"D2","level":"warning","message":{"text":"check_asf_yaml_status_checks.get_workflow_jobs (cognitive 16): check_asf_yaml_status_checks.get_workflow_jobs has cognitive complexity 16 (threshold 15). Drivers by points: if/else 3 (8 pts), boolean chains 3, loops 2 (3 pts), ternaries 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ci/scripts/check_asf_yaml_status_checks.py"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"09e2856aafc4f282b94e3e1f0e3b2543d884ccbb116c0889272c4de0f56ffabc"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlToRel.sql_statement_to_plan_with_context_impl: MethodTooLong \u2014 sql_statement_to_plan_with_context_impl runs 1028 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 928 over it, 10.28\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"98db6ae29a72c27fef67177355d840d861d6e64377484fa98cbfe586f8ab83a1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DefaultPhysicalPlanner.map_logical_node_to_physical: MethodTooLong \u2014 map_logical_node_to_physical runs 1009 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 909 over it, 10.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"37eb8d895b0fb44bdfea842989bcb9af6e7cc3b1e031e6a1a16b278485261690"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Simplifier.f_up: MethodTooLong \u2014 f_up runs 847 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 747 over it, 8.47\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"e31f8d69fcf0f0cd98a5245b379a90b6ec9079f37106387b3bd3ca77fd3338fe"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ScalarValue: ClassTooLong \u2014 3335 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 86 methods, 15 blocks, lines 358-5973. The bar is 400 significant lines; this is 2935 over it, 8.34\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef41f55ff6c4815efe0be4ff040d3efa748f10cf5a4e8a4868e9881e0b00b2db"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: scalar/mod.rs: FileTooLong \u2014 3798 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 88% of them inside a single declaration: ScalarValue (15 blocks, 358-5973). The bar is 500 significant lines; this is 3298 over it, 7.60\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a761d9fb44c40e8df39e50fc7ddce1c64901a6f9417b2151c39ca4b91e9d90e8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Unparser.select_to_sql_recursively: MethodTooLong \u2014 select_to_sql_recursively runs 691 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 591 over it, 6.91\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aed7ed6bb819be7672585ed30a91ed52a40ac4724d767940b2bee8c9bdd3617"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: logical_plan/plan.rs: FileTooLong \u2014 2998 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 2498 over it, 6.00\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"71d33ac76caa5e0caaf076f1dba2be8f3c2fd315dafb19d5e53a3379438fc241"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SqlToRel: TooManyMethods \u2014 142 methods, declared across 19 files: src/statement.rs (30), expr/mod.rs (25), src/select.rs (17), src/planner.rs (12), \u002B15 more file(s). The bar is 30 methods; this is 112 over it, 4.73\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/planner.rs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc797bcd37fae992d93f193a6bcbefdbe494352a6d0d00a66bc67ce482799b9d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlToRel.sql_function_to_expr: MethodTooLong \u2014 sql_function_to_expr runs 463 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 363 over it, 4.63\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"b81dfb17cf11aa7015dccb8d3a503755c04a1d23b73e0af1d8a163cf5c75a10f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/physical_planner.rs: FileTooLong \u2014 2313 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 70% of them inside a single declaration: DefaultPhysicalPlanner (5 blocks, 149-3369). The bar is 500 significant lines; this is 1813 over it, 4.63\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e9ff02ad4d6af2265dc627c5cc0d8d456772dd0303c66e210b97a4910745e4b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/statement.rs: FileTooLong \u2014 2309 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 92% of them inside a single declaration: SqlToRel (233-3196). The bar is 500 significant lines; this is 1809 over it, 4.62\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c49e50d0ca72d13817c8bbe6b4cb8c417d135d19c38ef25c0a54985590d48f3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_expr::planner::create_physical_expr: FunctionTooLong \u2014 datafusion_physical_expr::planner::create_physical_expr runs 445 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 345 over it, 4.45\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/planner.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"24bd64e019f937c97553d9cf03511417a485cfbcdeec6e3192f51a3a3b26ba14"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/expr.rs: FileTooLong \u2014 2108 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1608 over it, 4.22\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1a00ab7b546008ddaf41f7f67ee0637574a753ffa87cf56b703123fe573cca1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: joins/nested_loop_join.rs: FileTooLong \u2014 2067 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1567 over it, 4.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25f33b8d69499fb4e1dfbed4e530f5bc0b72287ce3b9ce700f07ece3d34c22f7"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DefaultPhysicalPlanner: ClassTooLong \u2014 1625 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 18 methods, 5 blocks, lines 149-3369. The bar is 400 significant lines; this is 1225 over it, 4.06\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"6410f4a75aad61735f700c105f14ea9d48f62756ad9eeac494ebc676d25c222b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Unparser.expr_to_sql_inner: MethodTooLong \u2014 expr_to_sql_inner runs 378 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 278 over it, 3.78\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4f96f5f31fbf890d60bbc1ac7c9f999e7ac4c676bf806720b6a2d86fa351eb6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: unparser/plan.rs: FileTooLong \u2014 1852 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 96% of them inside a single declaration: Unparser (173-2956). The bar is 500 significant lines; this is 1352 over it, 3.70\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd8f33190015c90db4be5f44c21541ac44f3afcdbca0cdacd0da860387424807"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_substrait::logical_plan::consumer::expr::literal::from_substrait_literal: FunctionTooLong \u2014 datafusion_substrait::logical_plan::consumer::expr::literal::from_substrait_literal runs 370 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 270 over it, 3.70\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/expr/literal.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aeaab087960a6b02cc1d318bf6536e0c19c94d9e47d0cfc7a3f0214ef1cf185"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_proto::logical_plan::from_proto::parse_expr: FunctionTooLong \u2014 datafusion_proto::logical_plan::from_proto::parse_expr runs 369 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 269 over it, 3.69\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f95e9599edb0a769a225b1cd9c85bc8ea6e6d429b49ffa29e6a5cffa6e65a9"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LogicalPlan.with_new_exprs: MethodTooLong \u2014 with_new_exprs runs 363 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 263 over it, 3.63\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"65ed6748593a2321a0d1a1086fda97567e7f1253925406bba3a3021a08dafe85"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: logical_plan/mod.rs: FileTooLong \u2014 1804 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 82% of them inside a single declaration: LogicalPlanNode (481-2382). The bar is 500 significant lines; this is 1304 over it, 3.61\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e0f32a7400b66985cadfafe918e5b5e3595224d12a743de2329c7be39d2c1e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LogicalPlan: ClassTooLong \u2014 1442 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 48 methods, 7 blocks, lines 215-2459. The bar is 400 significant lines; this is 1042 over it, 3.61\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f83e17a25cc207f912c89d0e76719024c4b16814df6083d2f17d3a4c510a781"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: aggregates/mod.rs: FileTooLong \u2014 1742 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 64% of them inside a single declaration: AggregateExec (5 blocks, 869-2837). The bar is 500 significant lines; this is 1242 over it, 3.48\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c7af93d366c810872f666a74a935e3dcccd3a376b8857dea05f6a8a76c08f7b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_proto::logical_plan::to_proto::serialize_expr: FunctionTooLong \u2014 datafusion_proto::logical_plan::to_proto::serialize_expr runs 344 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 244 over it, 3.44\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/to_proto.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"6744d278238b4bd7afb023a281b57c7ffa45436a4c41b7508aed47537b87fb26"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SessionContext: TooManyMethods \u2014 103 methods, declared across 5 files: context/mod.rs (92), context/csv.rs (3), context/json.rs (3), context/parquet.rs (3), \u002B1 more file(s). The bar is 30 methods; this is 73 over it, 3.43\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/context/mod.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a682914d30343707cdbfa267cdef8430c6118656eabf640f2a1c158e4138f43"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hash_join/exec.rs: FileTooLong \u2014 1713 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1213 over it, 3.43\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cfb3517bfaeaaef585a84754bc023b047b4fdf7435d26b462d0630a5dde1ec1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PushDownFilter.rewrite: MethodTooLong \u2014 rewrite runs 342 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 242 over it, 3.42\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"2481f9aec8fbe06df50c6041a6007dfe4e38ace7bb94ab43596f4aed2b1a53b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_expr::type_coercion::functions::get_valid_types: FunctionTooLong \u2014 datafusion_expr::type_coercion::functions::get_valid_types runs 335 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 235 over it, 3.35\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cfa637753a0b018128fa53f5b21234cf3c5311e433babab1bc0da146563e764"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlToRel.sql_expr_to_logical_expr_internal: MethodTooLong \u2014 sql_expr_to_logical_expr_internal runs 330 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 230 over it, 3.30\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"817ea6c8ecb4fbf9337665b94ade6310728610f9494955b29d016cbde643421c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/config.rs: FileTooLong \u2014 1638 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1138 over it, 3.28\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/config.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af9645924452b271a104097f8b4349c70ccf118249b124211c6208d655226c59"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TypeCoercionRewriter.f_up: MethodTooLong \u2014 f_up runs 318 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 218 over it, 3.18\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"9728bd0e83cfd8b84ef083be1e5cd75003a536586938c9103eb997f217677929"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: joins/utils.rs: FileTooLong \u2014 1550 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 45 free functions. The bar is 500 significant lines; this is 1050 over it, 3.10\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b4de6d3d0511f5e5ae54604cfed20a62a922be8241256d752b4de169d6e2893"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Expr.normalize_eq: MethodTooLong \u2014 normalize_eq runs 310 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 210 over it, 3.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":2365}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1336ed75ea981aae0fe4d2a1d10c9217f39b599701388b14c8c3aa43130f5ae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: string/format_string.rs: FileTooLong \u2014 1535 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 60% of them inside a single declaration: ConversionSpecifier (2 blocks, 394-2258). The bar is 500 significant lines; this is 1035 over it, 3.07\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfeeffc53e29ec5230e4fa115559e3544caa25056f58c697bce02032a3435330"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Unparser: TooManyMethods \u2014 92 methods, declared across 3 files: unparser/plan.rs (55), unparser/expr.rs (34), unparser/mod.rs (3). The bar is 30 methods; this is 62 over it, 3.07\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/mod.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"49e42ac9d6c8f118023ae43bbe7f0daa711483d931dbb4e716d0a648799cfff8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: execution/session_state.rs: FileTooLong \u2014 1527 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1027 over it, 3.05\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dde15b9ee2dfe2e6ee9d6775c2a128bfa48bcf880ad85647a13dd05da1ba3a34"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.to_array_of_size: MethodTooLong \u2014 to_array_of_size runs 293 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 193 over it, 2.93\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":3463}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cc1232500b2ec626c674e1a445c377aaee295a8034358fd0c9ab80846d4f626"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScalarValue: TooManyMethods \u2014 86 methods. The bar is 30 methods; this is 56 over it, 2.87\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9d924581090fd13efe25529840869271d6d1f37d5aa1c51852900e62d3f527b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LogicalPlan.display: MethodTooLong \u2014 display runs 285 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 185 over it, 2.85\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":2068}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cbb594da8085b34c6c8c4f3dca13f7433150497f29fcd55ebdcbac5855bea72"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlToRel.select_to_plan: MethodTooLong \u2014 select_to_plan runs 282 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 182 over it, 2.82\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"719b1497f7720010790d40f26f321411f889c6a54ffd88a6a72380ad2838b2e7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: repartition/mod.rs: FileTooLong \u2014 1395 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 895 over it, 2.79\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6208c21efcb515ed758dc216cda8c100deda8db708ff4d29c485664539219e89"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AggregateExec: ClassTooLong \u2014 1110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 40 methods, 5 blocks, lines 869-2837. The bar is 400 significant lines; this is 710 over it, 2.78\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"beb2c8602dfa63127dea7ac6387508d064ab87ae1463bec109e812d583239419"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: logical_plan/builder.rs: FileTooLong \u2014 1386 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 67% of them inside a single declaration: LogicalPlanBuilder (4 blocks, 129-1674). The bar is 500 significant lines; this is 886 over it, 2.77\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ed41bfbaff85de62bc857515d0f782bd5afb412f7d65a6dcc050f1d5c5f4352"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: unparser/expr.rs: FileTooLong \u2014 1376 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 97% of them inside a single declaration: Unparser (95-1942). The bar is 500 significant lines; this is 876 over it, 2.75\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"35d5f039f5c1569f3d9f8e43a240b9dfc6cbb28f43b1039dc4c4050383bdb99f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SessionContext: ClassTooLong \u2014 1098 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 103 methods, 6 blocks, lines 294-2253. The bar is 400 significant lines; this is 698 over it, 2.75\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/context/mod.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"d25bf9e10907a793af52cc73182e5506e1caffc6c3882d5b697f448dadd0183e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ConversionSpecifier.format: MethodTooLong \u2014 format runs 274 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 174 over it, 2.74\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":996}}}],"partialFingerprints":{"codehealthFindingId/v1":"e105227b822cdd0191b851ee1e2fbaf0bd4a07f935307b243abd64cbdd97b053"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Expr: ClassTooLong \u2014 1089 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 53 methods, 13 blocks, lines 326-3796. The bar is 400 significant lines; this is 689 over it, 2.72\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"b65cadf6c45d3c78fcc946e2d05c656773f9a6c91ab115c7871e526523c634d7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: simplify_expressions/expr_simplifier.rs: FileTooLong \u2014 1360 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 63% of them inside a single declaration: Simplifier (3 blocks, 821-2208). The bar is 500 significant lines; this is 860 over it, 2.72\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a662a636ff3e0771fecec4186bc8e356c22e72bb07c7d71957c97f940c89b05"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LogicalPlan.map_children: MethodTooLong \u2014 map_children runs 271 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 171 over it, 2.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/tree_node.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e4e4884c39e12e6611772c563d026de5da361da50df3700c1978ec3f6a1a128"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PgJsonVisitor.to_json_value: MethodTooLong \u2014 to_json_value runs 265 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 165 over it, 2.65\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/display.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"171466b63bd61fe3149bf75d7d4e45149e463a16f80711e84959031eec262e2b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_plan::joins::hash_join::exec::collect_left_input: FunctionTooLong \u2014 datafusion_physical_plan::joins::hash_join::exec::collect_left_input runs 260 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 160 over it, 2.60\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":3027}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a9aed8dfeb9db77a95e2a38577ef82f2a0ecd8eeeae9137a39834dc6d945a35"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.iter_to_array: MethodTooLong \u2014 iter_to_array runs 257 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 157 over it, 2.57\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":2821}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c52a6506d69e91009ec1ef2164d2889c9d6fff227cb34c253b96594d479cece"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: context/mod.rs: FileTooLong \u2014 1280 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 86% of them inside a single declaration: SessionContext (6 blocks, 294-2253). The bar is 500 significant lines; this is 780 over it, 2.56\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/context/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"292b11c37e3060c03f76dec592b8615ac434b285ce86c489391a1fcaeb948e47"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: topk/mod.rs: FileTooLong \u2014 1276 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 776 over it, 2.55\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"592bb23e5c452c06d7cd290f94a74eb37a3ccaefa9757f49331d318847095ef1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: type_coercion/binary.rs: FileTooLong \u2014 1250 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 57 free functions. The bar is 500 significant lines; this is 750 over it, 2.50\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3fcaa7097734979b1fa835b226ab0534e99814b4226171e0957792a5f58e45f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: joins/symmetric_hash_join.rs: FileTooLong \u2014 1237 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 737 over it, 2.47\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/symmetric_hash_join.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"913a5d8bc9ade55ad2d839e47f3cc1a11e7fc4ba21a8cb612a57ba868ede339c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_optimizer::optimize_projections::optimize_projections: FunctionTooLong \u2014 datafusion_optimizer::optimize_projections::optimize_projections runs 238 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 138 over it, 2.38\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/optimize_projections/mod.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea4fe3963938af770bfb057f7fcfaf402d02504c431eb50539c559a0dd582e2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: opener/mod.rs: FileTooLong \u2014 1186 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 686 over it, 2.37\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/opener/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2168cb0e38e4cbff2f4b0a98cd019524b2731e1ee6b6284e4b7aeef17bd4a0e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_optimizer::ensure_requirements::enforce_distribution::ensure_distribution_with_stats: FunctionTooLong \u2014 datafusion_physical_optimizer::ensure_requirements::enforce_distribution::ensure_distribution_with_stats runs 232 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 132 over it, 2.32\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":1363}}}],"partialFingerprints":{"codehealthFindingId/v1":"72b0a57a723ee063929a7bc58a137877b8cb95c6fe24a4202fc12b83e1c094d5"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: LogicalPlanBuilder: ClassTooLong \u2014 923 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 63 methods, 4 blocks, lines 129-1674. The bar is 400 significant lines; this is 523 over it, 2.31\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ce8d2169502a0c3d12f857996e43ff8bc2e7e7bef40b4c5f2003037804fd524"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sort_merge_join/materializing_stream.rs: FileTooLong \u2014 1152 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 72% of them inside a single declaration: MaterializingSortMergeJoinStream (2 blocks, 279-1942). The bar is 500 significant lines; this is 652 over it, 2.30\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d5c6a849943dd255db89962734ef5928cc485f665e445278de2f878a446131f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ConversionSpecifier: ClassTooLong \u2014 914 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 20 methods, 2 blocks, lines 394-2258. The bar is 400 significant lines; this is 514 over it, 2.29\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"6af3e377ab2be2c945b3a20b58a4f8dec62537b976674af6aa7b5f881703759d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_substrait::logical_plan::producer::types::to_substrait_type_from_field: FunctionTooLong \u2014 datafusion_substrait::logical_plan::producer::types::to_substrait_type_from_field runs 224 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 124 over it, 2.24\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/types.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"01d2b8679afd3ba68f6519eb7e0b6efe44133c504aea8de353fce839c04f8495"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_spark::function::math::negative::spark_negative: FunctionTooLong \u2014 datafusion_spark::function::math::negative::spark_negative runs 223 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 123 over it, 2.23\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/negative.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3ede7bd0c2643a13101d45706e0a3756eebe8efe70e654af8c5a1929df51080"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_substrait::logical_plan::producer::expr::literal::to_substrait_literal: FunctionTooLong \u2014 datafusion_substrait::logical_plan::producer::expr::literal::to_substrait_literal runs 222 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 122 over it, 2.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/expr/literal.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"f929ee0b62ae6976b5970ba42e794dfa67e6d0320ab54be645401fb64ffdb7a7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/array_agg.rs: FileTooLong \u2014 1106 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 606 over it, 2.21\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a36a87c154aa4c1dbae26f1e46eee2eca962def9d176bb68158052f4e54c7829"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: HashJoinExec: ClassTooLong \u2014 877 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 27 methods, 7 blocks, lines 890-2357. The bar is 400 significant lines; this is 477 over it, 2.19\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"207d62f0af870cd30d2444e0c579f6c4a4f5e88ee006f3bf75149f4131bf4264"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LogicalPlan.map_expressions: MethodTooLong \u2014 map_expressions runs 217 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 117 over it, 2.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/tree_node.rs"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5be4c9dabd2e92072dd1e205140fd3a0dd6b655eeb1ef5cdb72bc1ad9bd1f37"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/pruning_predicate.rs: FileTooLong \u2014 1084 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 33 free functions. The bar is 500 significant lines; this is 584 over it, 2.17\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c22b827563e9b138460afed4fa5b13ede5d651937adbea2ccc9737f3cf7c324b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataFrame: TooManyMethods \u2014 65 methods, declared across 2 files: dataframe/mod.rs (64), dataframe/parquet.rs (1). The bar is 30 methods; this is 35 over it, 2.17\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/dataframe/mod.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"e655036abb290cca5c7301ea76077232f382967a379adf28b03529d342900d53"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SessionState: TooManyMethods \u2014 65 methods. The bar is 30 methods; this is 35 over it, 2.17\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"d105d38dcce313755a46a3fbee74c61749e50335f3d6ff60406ec59bfb94c5f5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SessionStateBuilder: TooManyMethods \u2014 65 methods. The bar is 30 methods; this is 35 over it, 2.17\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd54047abc7c2897c927641b410aefb83fe672809b4f11f67a0eadac5c2f0c5f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Simplifier: ClassTooLong \u2014 854 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 1 methods, 3 blocks, lines 821-2208. The bar is 400 significant lines; this is 454 over it, 2.14\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"d02ec0684c264ff0138b19d164191c73e79bf1b52e01a11ece661bd50cfc7311"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/interval_arithmetic.rs: FileTooLong \u2014 1057 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 557 over it, 2.11\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/interval_arithmetic.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"37f2a2bfeb1db0849f0682b31c1493bf7f5a27a2f879029917a0c305acb26553"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expr/mod.rs: FileTooLong \u2014 1056 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 82% of them inside a single declaration: SqlToRel (213-1420). The bar is 500 significant lines; this is 556 over it, 2.11\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2239a32a248e09e32fc374050b8267447c6e2d6c72a74e9f852f14239a0630d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LogicalPlanBuilder: TooManyMethods \u2014 63 methods. The bar is 30 methods; this is 33 over it, 2.10\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bc775c10844f8f214049b60ebdf17d156915351a612679ff9bcde19cec5209f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SchemaDisplay.fmt: MethodTooLong \u2014 fmt runs 210 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 110 over it, 2.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3006}}}],"partialFingerprints":{"codehealthFindingId/v1":"12ecf5c1087bdf46ccc310a5c813ed0e2a18846ea870bf32e058e4bec65f6e14"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_functions::datetime::date_bin::date_bin_impl: FunctionTooLong \u2014 datafusion_functions::datetime::date_bin::date_bin_impl runs 210 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 110 over it, 2.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_bin.rs"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ddc02baba40bd625182359d88b457956f4541092b33bccf38317edf78d0d8ab"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: analyzer/type_coercion.rs: FileTooLong \u2014 1043 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 543 over it, 2.09\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"394edd0b5c526b001275f640e9f3706a8becda645dddd1b85da0f91d3a7a4980"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: MaterializingSortMergeJoinStream: ClassTooLong \u2014 832 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 42 methods, 2 blocks, lines 279-1942. The bar is 400 significant lines; this is 432 over it, 2.08\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"87f4163f878e6b7abc5edd83f5fc9de4b26bd6b1d675400e97a635ba26c91553"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: from_proto/mod.rs: FileTooLong \u2014 1039 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 539 over it, 2.08\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c763686471a83819b97a8750a271b8591d153b3cc2c21716090420916057e899"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ensure_requirements/enforce_distribution.rs: FileTooLong \u2014 1037 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 537 over it, 2.07\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eec585f85d76a0fd240a2a728452f01ca630208b3cf05504a469378b98ead80"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: NestedLoopJoinStream: ClassTooLong \u2014 828 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 24 methods, 5 blocks, lines 1944-3618. The bar is 400 significant lines; this is 428 over it, 2.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":1944}}}],"partialFingerprints":{"codehealthFindingId/v1":"b38a4d4e938e4e2e3aef3617bc2f037089f10c6b14afbd78ceb207960ce4803d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DataFrame: ClassTooLong \u2014 823 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 65 methods, 2 blocks, lines 230-2748. The bar is 400 significant lines; this is 423 over it, 2.06\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/dataframe/mod.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a4273e5dad44894b66f9001077ab2886120f44f8927dabb9ddc0b4edea93ff"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/information_schema.rs: FileTooLong \u2014 1001 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 501 over it, 2.00\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b08e516d4c0ff4115dcbfd9ea3bbd79a13881b2391195a2dea6c7bb85de890b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: joins/asof_join.rs: FileTooLong \u2014 994 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 494 over it, 1.99\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db5c141b9689801fbe6d8c7e51d84e352398165a1046d9a905eb83b37c6a6d66"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SessionConfig: TooManyMethods \u2014 59 methods. The bar is 30 methods; this is 29 over it, 1.97\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/execution/src/config.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"a96b29ec8ef29070b46c911425984d0ff931ecf7729f8bd17e0311035e98c906"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_functions::regex::regexpcount::regexp_count_inner: FunctionTooLong \u2014 datafusion_functions::regex::regexpcount::regexp_count_inner runs 196 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 96 over it, 1.96\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"d03e2621545b693368f2e9e52a55c3931b1682e77298542527a44113b7c05c2a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sorts/sort.rs: FileTooLong \u2014 977 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 477 over it, 1.95\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/sort.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a12219debe877e7e2bd1c5a3f317bc3d6c9d9d113b921881866e788a88758d14"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dataframe/mod.rs: FileTooLong \u2014 976 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 84% of them inside a single declaration: DataFrame (2 blocks, 230-2748). The bar is 500 significant lines; this is 476 over it, 1.95\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/dataframe/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"96f8768c7e736fc110c6b70f6f296419c899572c5597bd6648f09917622d36bc"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.try_from_array: MethodTooLong \u2014 try_from_array runs 194 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 94 over it, 1.94\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":4054}}}],"partialFingerprints":{"codehealthFindingId/v1":"06bf35744f1d75758685b9694a86c623c609924e842add715f35f61de6da3006"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Unparser.scalar_to_sql: MethodTooLong \u2014 scalar_to_sql runs 194 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 94 over it, 1.94\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":1313}}}],"partialFingerprints":{"codehealthFindingId/v1":"615bdc8de47f092f4ea95860e480850ba8851ee6a28d84b857a4026e59870dd8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/first_last.rs: FileTooLong \u2014 969 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 469 over it, 1.94\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eeb3e550f492ab696aaa25cbf52cdc86a3d269ed0fa0a2d2e0ad20d3a08b639"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/select.rs: FileTooLong \u2014 967 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 90% of them inside a single declaration: SqlToRel (97-1475). The bar is 500 significant lines; this is 467 over it, 1.93\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aaf908fd59c4c6bf3ef4fc25f191533c25d5298e05de68c6a6953cbedf97ddb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/filter.rs: FileTooLong \u2014 966 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 466 over it, 1.93\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/filter.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"77aa4ee4346bd9570dcc7a9a43485b5bf6e4036ab210d78f235248010b580335"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Expr.map_children: MethodTooLong \u2014 map_children runs 192 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 92 over it, 1.92\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/tree_node.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8e35d9ffad6bc3919edca932cf4c81ab2b8ed452ed6e58759fb85c77c78159e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hash_join/stream.rs: FileTooLong \u2014 941 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 441 over it, 1.88\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/stream.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bab4ef6c67618aa770b9d656bee95aa95d8dc1aab994dd143ef08ab006ff5fa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: windows/bounded_window_agg_exec.rs: FileTooLong \u2014 930 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 430 over it, 1.86\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a0cf3414f482c0f82842d898040683a5d227bae84e981550b4a51e07638a2c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_functions_aggregate_common::min_max::min_max_scalar_same_variant: FunctionTooLong \u2014 datafusion_functions_aggregate_common::min_max::min_max_scalar_same_variant runs 186 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 86 over it, 1.86\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/min_max.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"e08c28ba5134e01da56583d60441ff235e92935f60eed03ea66f3ff0c82e8ef1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: datafusion_common::cast: TooManyFunctions \u2014 55 free functions. The bar is 30 free functions; this is 25 over it, 1.83\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/cast.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f7384db6d595974851be1ed5bd62e17eb71f4f39d0d9fde3ec1772d7091e61b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlToRel.convert_simple_data_type: MethodTooLong \u2014 convert_simple_data_type runs 183 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 83 over it, 1.83\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/planner.rs"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"79fdd2d3a19aaa376393b255f97b857b734e7dcb0a6ff2a49a89dd9851485d21"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Expr.fmt: MethodTooLong \u2014 fmt runs 182 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 82 over it, 1.82\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3559}}}],"partialFingerprints":{"codehealthFindingId/v1":"013294886bad83ad6fb6271a27971c1e05689a18ad0ab169a4937d6f5360bc20"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RowGroupsPrunedParquetOpen.build_stream: MethodTooLong \u2014 build_stream runs 181 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 81 over it, 1.81\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/opener/mod.rs"},"region":{"startLine":1593}}}],"partialFingerprints":{"codehealthFindingId/v1":"67b11fa44e1950081771619fdbb769a598373519a6a6d9832c7d0a95b19b5d62"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/projection.rs: FileTooLong \u2014 896 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 396 over it, 1.79\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/projection.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1c96a3f5969381b6e8022ce55195b59da2ca3b41d52c32d2fddc15d893304cb"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PagePruningAccessPlanFilter.prune_plan_with_page_index_and_metrics: MethodTooLong \u2014 prune_plan_with_page_index_and_metrics runs 179 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 79 over it, 1.79\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/page_filter.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"19977595ae040300a0030249abf97c12e54d53a660f74b96119a79b37d7f4e35"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Expr: TooManyMethods \u2014 53 methods. The bar is 30 methods; this is 23 over it, 1.77\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ec9cf9fadc1ac3579cd54b58436b1611298e670b5c19dde2cdab822c7697f9c"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_substrait::logical_plan::consumer::types::from_substrait_type: FunctionTooLong \u2014 datafusion_substrait::logical_plan::consumer::types::from_substrait_type runs 175 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 75 over it, 1.75\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/types.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"037a5e921478fae202f7925ce412eb88f4c82caf4f11cefd2044049669775460"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PullUpCorrelatedExpr.f_up: MethodTooLong \u2014 f_up runs 174 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 74 over it, 1.74\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"f04d51cec02b63ae9042644a6c9da37ad3709104e81bb38d812ac2ffa4867b35"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expressions/binary.rs: FileTooLong \u2014 869 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 369 over it, 1.74\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c642d13a7a808356747eb71342231121672597a0a8b7fe1f114edf155106c8cd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/parser.rs: FileTooLong \u2014 867 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 70% of them inside a single declaration: DFParser (2 blocks, 452-1518). The bar is 500 significant lines; this is 367 over it, 1.73\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1b5e332ddb514676e071348eca9f2d6712bddcb50fa4345ef9925dbeaaadc31"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: AggregateExec.try_from_proto: MethodTooLong \u2014 try_from_proto runs 171 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 71 over it, 1.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2629}}}],"partialFingerprints":{"codehealthFindingId/v1":"971ac1a002f6990c8eaf9648f1805e261962046f57e04551325a7503c5dcb50f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: StepContext.run_test: MethodTooLong \u2014 run_test runs 171 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 71 over it, 1.71\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"xtask/src/ci_steps.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c37947d1454101f5c13ee7821901b1794681483c2b68caa565ccceafabdadba"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: physical_plan/mod.rs: FileTooLong \u2014 852 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 352 over it, 1.70\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f39cd133c081ca0a73f4220af5a4cd18193e315a53fb6da0c04dea62e11e475"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GroupedHashAggregateStream.new: MethodTooLong \u2014 new runs 170 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 70 over it, 1.70\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"c292a569fe56a25b455a3b12d5083aecd99bf80a48ff494a8643678a7b9abf50"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expressions/case.rs: FileTooLong \u2014 838 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 338 over it, 1.68\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/case.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"07a01dbbe6a4c7c6b72a018b83b1ef110a5d086960e5a2a68f3c401303d8783f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Expr.to_field: MethodTooLong \u2014 to_field runs 167 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 67 over it, 1.67\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"0937b06ac3f409c73bac09674c00743e12c7857c037fd8f049c365e55e774059"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/display.rs: FileTooLong \u2014 833 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 333 over it, 1.67\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e53f86e5367d8d008145c4b6a01da4a1193683fa796ec6cc45272f2f204e11c0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: GroupedHashAggregateStream: ClassTooLong \u2014 662 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 15 methods, 5 blocks, lines 283-1480. The bar is 400 significant lines; this is 262 over it, 1.66\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"911f2ef1e06c6789dc5e619440abfcf3dc2159ed994e99d93ff70d19600bbf5e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SessionState: ClassTooLong \u2014 654 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 65 methods, 9 blocks, lines 144-2453. The bar is 400 significant lines; this is 254 over it, 1.64\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"e77cf5557b180ab9caa8856e276e14257bf88b33447533504194953b7a5f2b38"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DFSchema: TooManyMethods \u2014 49 methods. The bar is 30 methods; this is 19 over it, 1.63\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"10f62d3e5e104863b1a530eecc7aba4ccc4a97a0a783a99b4837e1c013f963e5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: expr/function.rs: FileTooLong \u2014 816 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 82% of them inside a single declaration: SqlToRel (227-1198). The bar is 500 significant lines; this is 316 over it, 1.63\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"65d39493e9a61ade002fe58aa05134b35a51169ad9d22fc6e40bd6001e6e40ae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/signature.rs: FileTooLong \u2014 815 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 315 over it, 1.63\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/signature.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"105bf383762c627e9fdcc093e3009630e5b411522e6bb31f62f3493f29be8205"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.eq_array: MethodTooLong \u2014 eq_array runs 162 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 62 over it, 1.62\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":4553}}}],"partialFingerprints":{"codehealthFindingId/v1":"39f50c4801f740d8827bf5d733cf72ad2aaaa723c7f5d03fe89fdb0375648557"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/average.rs: FileTooLong \u2014 803 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 303 over it, 1.61\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/average.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"13ae01a2d9c95bf5f97db0e1512e1db94cacec19d9af5cc0165b7e2f67e56255"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: to_proto/mod.rs: FileTooLong \u2014 802 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 302 over it, 1.60\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/to_proto/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"634ffd881b467ea5318a654f5ac9fcfadaab0f3d6c973047156ad3307764a081"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LogicalPlan: TooManyMethods \u2014 48 methods, declared across 2 files: logical_plan/plan.rs (35), logical_plan/tree_node.rs (13). The bar is 30 methods; this is 18 over it, 1.60\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"724e5e33b6529bd0ab2120ba10230eb9f3484952e412cbe14e0c4f989a1fa7e4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EquivalenceProperties: TooManyMethods \u2014 48 methods. The bar is 30 methods; this is 18 over it, 1.60\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/mod.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b16fb62e48a19175cb7c8d84bc844f95efbf31a1087a3baa8a85cdb2e5830a6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/utils.rs: FileTooLong \u2014 800 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 59 free functions. The bar is 500 significant lines; this is 300 over it, 1.60\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/utils.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9d87a5baad5dc9699bf6af512536fce770677874d9379af5bb6e83f8d1fc293"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_spark::function::math::round::spark_round: FunctionTooLong \u2014 datafusion_spark::function::math::round::spark_round runs 157 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 57 over it, 1.57\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/round.rs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"58e92efae2f8f351ac041a84ec62f34e4be74235b47dedb4110b0d53090666c2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/push_down_filter.rs: FileTooLong \u2014 783 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 283 over it, 1.57\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9712fe5822cda88d6ef831582aaddc6ce2064518ece8bc853b1a1e1cceab7fed"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/unnest.rs: FileTooLong \u2014 783 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 283 over it, 1.57\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/unnest.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"85658b8b1efcdc1b672e6f4d50f6e35009b724838e52f91c94a24aeba05a55f2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: logical_plan/tree_node.rs: FileTooLong \u2014 780 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 95% of them inside a single declaration: LogicalPlan (2 blocks, 60-1086). The bar is 500 significant lines; this is 280 over it, 1.56\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/tree_node.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d3a5391db259ac07963e4a8b04199c9c51058125c1602f8181154c028d5e726"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: type_coercion/functions.rs: FileTooLong \u2014 780 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 280 over it, 1.56\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"464f37ee973a1fba506cc076891a0abae8e129e2a16bae995708cab8846a27f5"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: EquivalenceProperties: ClassTooLong \u2014 621 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 48 methods, 3 blocks, lines 136-1506. The bar is 400 significant lines; this is 221 over it, 1.55\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/mod.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b075f8bcd82262821bf50c6f6f1b3c415d785b8968d5ce86ec14a796a149594"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ListingTableFactory.create_inner: MethodTooLong \u2014 create_inner runs 155 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 55 over it, 1.55\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/listing_table_factory.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"561860f60dc4f4dcfd20379b17f2837107fecafbaa6586751f0d309ebcecd182"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: utils/mod.rs: FileTooLong \u2014 773 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 46 free functions. The bar is 500 significant lines; this is 273 over it, 1.55\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/utils/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8e60f92bb71008281de31b28b73b7948358ffe7bac970eae345a4d731124357"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/strings.rs: FileTooLong \u2014 770 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 270 over it, 1.54\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/strings.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cf3472ce92b2655e18e8d4e56049e83efdfed769093806c9ec2ab94a9ea6f70"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/hash_utils.rs: FileTooLong \u2014 768 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 268 over it, 1.54\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f7e5340545255d72e48d624f4c53b56a1ae952c699a0e3a396dd46230ce3875"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/array_has.rs: FileTooLong \u2014 766 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 266 over it, 1.53\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_has.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b97bad3ea244e9416e702b02c5966f0b06feb5a84743d670513e25469e7ea00"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.fmt: MethodTooLong \u2014 fmt runs 153 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 53 over it, 1.53\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":5779}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d8688d6a78183394804b2694af0ec6a45085d5931d37b66d831af8a313a92f2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Expr.hash_node: MethodTooLong \u2014 hash_node runs 152 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 52 over it, 1.52\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":2766}}}],"partialFingerprints":{"codehealthFindingId/v1":"0863235b4f034d5212b69ec7925ad162d493c63ba176a9ba84fb9e5e32a05ed6"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SessionStateBuilder: ClassTooLong \u2014 605 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 65 methods, 5 blocks, lines 1138-2082. The bar is 400 significant lines; this is 205 over it, 1.51\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"22817a7d80b4c529a51fb67bf5cb3864a397f4a082e7ab9dbe2df17cec735e44"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/dfschema.rs: FileTooLong \u2014 756 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 66% of them inside a single declaration: DFSchema (9 blocks, 113-1277). The bar is 500 significant lines; this is 256 over it, 1.51\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"846c2759235c2149bedeb5234c74c0267a9e84a8d6a2b484f36c700fe84d688d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: file_scan_config/mod.rs: FileTooLong \u2014 754 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 61% of them inside a single declaration: FileScanConfig (5 blocks, 153-1635). The bar is 500 significant lines; this is 254 over it, 1.51\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_scan_config/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f362e10b9c65aeb93f2207295d85d2e9448a3b1e2609a8935f6539651a35b16"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DFParser: ClassTooLong \u2014 603 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 30 methods, 2 blocks, lines 452-1518. The bar is 400 significant lines; this is 203 over it, 1.51\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bc3b542f4a890aba3f9559da50d5af2efbb8214ed3c5e0851439108c4c3bcb7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: properties/mod.rs: FileTooLong \u2014 734 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 85% of them inside a single declaration: EquivalenceProperties (3 blocks, 136-1506). The bar is 500 significant lines; this is 234 over it, 1.47\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a14df2a9a6a8f3563113b132c26fa4429a91efae5574c0de8b419f893a070ead"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: enforce_sorting/sort_pushdown.rs: FileTooLong \u2014 734 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 234 over it, 1.47\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbfa9138964142d2f2ed89dbcee5e1d68cbd6f07888e69da411bd32181e4dc78"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: datafusion_functions::math::monotonicity: TooManyFunctions \u2014 44 free functions. The bar is 30 free functions; this is 14 over it, 1.47\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/monotonicity.rs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"1167782e1515c876658b072a0fe1c4ce32c64cc2ca1c27b401267a20dbf2a37a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: TypeCoercionRewriter: ClassTooLong \u2014 585 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 11 methods, 3 blocks, lines 178-980. The bar is 400 significant lines; this is 185 over it, 1.46\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"01b84b9c5f2b06adb12e68c68b5e88bf8346b1c964085a51b69e6f4f749450dc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/nested_struct.rs: FileTooLong \u2014 730 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 230 over it, 1.46\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/nested_struct.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2e990f3aa0136076d3bfed1a1420b218a6c2aefeaa393963034a43b2e36bdc"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ListingTable: ClassTooLong \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 25 methods, 5 blocks, lines 181-1173. The bar is 400 significant lines; this is 177 over it, 1.44\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/table.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"db0e5e00ef8e895e3996d1d6ab5b49614ea99179d5d03d9b877f7885e05d3d60"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: aggregates/grouped_hash_stream.rs: FileTooLong \u2014 721 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 92% of them inside a single declaration: GroupedHashAggregateStream (5 blocks, 283-1480). The bar is 500 significant lines; this is 221 over it, 1.44\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdb4102feb29b284c3224ac6debd19a1e69c7e2e9018ed71059cfc7b8f90a9c6"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.partial_cmp: MethodTooLong \u2014 partial_cmp runs 144 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 44 over it, 1.44\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2b1f841476fa0b78bfadc30ae3b2c488f921dc79cea4a8f4523ed79fcfda82e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_sorts_helper: FunctionTooLong \u2014 datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_sorts_helper runs 144 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 44 over it, 1.44\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e2649775e04aec6d296a62b936893e52afbe00c9047dcbf17e157fed7cce172"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SessionStateBuilder.build: MethodTooLong \u2014 build runs 143 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 43 over it, 1.43\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"183839673347dc503fcff1a632b5c855e853d6c0ae4f137305550d04b6ca1468"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SymmetricHashJoinExec: ClassTooLong \u2014 571 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 13 methods, 5 blocks, lines 176-959. The bar is 400 significant lines; this is 171 over it, 1.43\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/symmetric_hash_join.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d535fa1c8195515d4b2c9fce3651e62b2c46017ec6ef5464ff4d10c8254117e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/table.rs: FileTooLong \u2014 708 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 81% of them inside a single declaration: ListingTable (5 blocks, 181-1173). The bar is 500 significant lines; this is 208 over it, 1.42\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/table.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7283829efdc7b015c935ca563fe2731a7d1b86f419c2229d27d00679934a652"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sort_merge_join/bitwise_stream.rs: FileTooLong \u2014 705 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 77% of them inside a single declaration: BitwiseSortMergeJoinStream (2 blocks, 207-1124). The bar is 500 significant lines; this is 205 over it, 1.41\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"30aa5d4bc65d36ce15dd7968e076c71b1ee5b7bc1a0d92145b521fc035b401aa"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DateTruncFunc.invoke_with_args: MethodTooLong \u2014 invoke_with_args runs 141 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 41 over it, 1.41\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_trunc.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e0329d57e3ad7a7c152be913d84726978782673e3543938d0bdc3fbfde8fa14"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MaterializingSortMergeJoinStream: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"6865ff4cbe18b2b226bfea8511d5f578726812d2d8b5d8fa22d5193cb5a4c678"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_expr_common::casts::try_cast_numeric_literal: FunctionTooLong \u2014 datafusion_expr_common::casts::try_cast_numeric_literal runs 140 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/casts.rs"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"c10f124ef0a54f88de3dbef2022138098c8cca6053d18ddba3d41d4e3d79da4b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_functions::math::round::round_columnar: FunctionTooLong \u2014 datafusion_functions::math::round::round_columnar runs 140 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"a85a47234725c7201ee95b28139a59d0f9a1b7b9d0c82a466510a2a3bbe0569f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CommonSubexprEliminate.try_optimize_aggregate: MethodTooLong \u2014 try_optimize_aggregate runs 140 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/common_subexpr_eliminate.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f42f5c930b972368d0d2f17c2d65e21d2d6b1fb4d49bc657ee86dab08ca200a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.fmt: MethodTooLong \u2014 fmt runs 139 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 39 over it, 1.39\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":5579}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bde294bc4f84b9889c12833b9f8a6d71ceb1ed80f08c3d627adfc340e378292"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_optimizer::ensure_requirements::enforce_distribution::enforce_distribution_relationships: FunctionTooLong \u2014 datafusion_physical_optimizer::ensure_requirements::enforce_distribution::enforce_distribution_relationships runs 139 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 39 over it, 1.39\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":1122}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f8306bb0928bafad665629419b46858032c874147be5cf60947e4480b14d567"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SymmetricHashJoinExec.try_from_proto: MethodTooLong \u2014 try_from_proto runs 139 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 39 over it, 1.39\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/symmetric_hash_join.rs"},"region":{"startLine":794}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9f757a7669f61f8e863147a3e5bdd8d5f1cd56a8bee31e8423845afdfd46438"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: unparser/dialect.rs: FileTooLong \u2014 693 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 193 over it, 1.39\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/dialect.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ace27c135a386e2cedbd0d8f55e27f8287e5440fa7997baab83b054efaf8f5a6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/extract.rs: FileTooLong \u2014 688 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 188 over it, 1.38\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/extract.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"874c482107cf619618b8cb2c3934111d3df03a7c48f708312509eec16edc0e09"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: math/round.rs: FileTooLong \u2014 686 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 186 over it, 1.37\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f1680a78b73e0547006414f2cb0976ab8da3e8671a8eb30ffe2debcb3390891"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/metadata.rs: FileTooLong \u2014 684 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 184 over it, 1.37\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/metadata.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eba7730998937f90d8464c44649170858e2bc246e28e6b3d9dfdd803fa585780"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SortMergeJoinExec: ClassTooLong \u2014 543 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 14 methods, 6 blocks, lines 114-892. The bar is 400 significant lines; this is 143 over it, 1.36\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/exec.rs"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"60a5ff359c0d00458fcb5637c8bdb69a4803d252c41d0c01fd8f7bf7c2a70eef"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: BitwiseSortMergeJoinStream: ClassTooLong \u2014 542 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 30 methods, 2 blocks, lines 207-1124. The bar is 400 significant lines; this is 142 over it, 1.36\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"4045ed0301f546ce6ae63b19a4d4eff066854795351403eaf85ca246222c99e3"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ParquetSource: ClassTooLong \u2014 538 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 23 methods, 4 blocks, lines 297-1308. The bar is 400 significant lines; this is 138 over it, 1.35\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/source.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d3301b7bd2f0cbe899a470ff8bd7172caf5ab58d08e84802818d38d474a3563"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: HashJoinStream.process_probe_batch: MethodTooLong \u2014 process_probe_batch runs 134 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 34 over it, 1.34\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/stream.rs"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"b96dbadfde969d62946cb838cfcffb6e21eed03c8023c268ae0e83bb1cca20bf"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: FilterExec: ClassTooLong \u2014 534 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 13 methods, 6 blocks, lines 86-1040. The bar is 400 significant lines; this is 134 over it, 1.34\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/filter.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a3e15bcd96299d2f12a6ce1cb13643bada9bbc5ef599806f8808c44bd80d83a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AggregateExec: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f1193dde55f9196c2bb38ddb056deac9a3bab9cd12224e48f11c001afcefdf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: PreparedParquetOpen: TooManyFields \u2014 40 stored fields beside 2 methods. The bar is 30 stored fields; this is 10 over it, 1.33\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/opener/mod.rs"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c0dd33dfa4fb5be9c7f733f37a5d37991eb606c85d237aea7aae49dcc5b0c90"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_optimizer::decorrelate_lateral_join::rewrite_internal: FunctionTooLong \u2014 datafusion_optimizer::decorrelate_lateral_join::rewrite_internal runs 133 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 33 over it, 1.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate_lateral_join.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8e8eff7eacfce714623e92b6ab198b224e3a5813895ebb05196c337f3031fb"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SingleDistinctToGroupBy.rewrite: MethodTooLong \u2014 rewrite runs 133 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 33 over it, 1.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/single_distinct_to_groupby.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"15537ad1d53dc551cb9a89e25e95494b414f8c5d8b8317b8845940d8041f9c46"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: HashJoinExec.execute: MethodTooLong \u2014 execute runs 133 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 33 over it, 1.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1685}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c5f9d0d37f6b01f6b65e16fde25292c9e652e1eed9ce96a2ec1003cda456ccd"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RepartitionExecState.consume_input_streams: MethodTooLong \u2014 consume_input_streams runs 133 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 33 over it, 1.33\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/mod.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"549f52af7dafea9e6a3011fc1e5d147ff2bdf8db46d29baba8acf0dbc7e843b0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/udaf.rs: FileTooLong \u2014 664 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 164 over it, 1.33\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/udaf.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce58259ee2655cb9c743c3cb04798a78b58b52d658b2af076898c75e528e454d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sort_merge_join/exec.rs: FileTooLong \u2014 664 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 82% of them inside a single declaration: SortMergeJoinExec (6 blocks, 114-892). The bar is 500 significant lines; this is 164 over it, 1.33\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/exec.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"66b583f65f158e345f443b130a941c2ef04511993e4a51585e56268fa1ddf386"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: SortExec: ClassTooLong \u2014 530 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 18 methods, 5 blocks, lines 997-1832. The bar is 400 significant lines; this is 130 over it, 1.33\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/sort.rs"},"region":{"startLine":997}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d3979d125c6152fbf2c904aa420bf5f1579cae690f27823de376ed08e93d0d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/execution_plan.rs: FileTooLong \u2014 662 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 162 over it, 1.32\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/execution_plan.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"33b69aad1b9749acb8b33a31df43fe6599fb3848508238fc92868240d0f13f03"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DataFrame.describe: MethodTooLong \u2014 describe runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/dataframe/mod.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"8633815667d43503bc0e4b38278d709318a729cb4e350c3aa785e7deba91bb87"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_substrait::logical_plan::consumer::rel::read_rel::from_read_rel: FunctionTooLong \u2014 datafusion_substrait::logical_plan::consumer::rel::read_rel::from_read_rel runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/rel/read_rel.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"69108e3026a4dbea04fa17d92fc3e860024321b33dafcc93b35d09732c6f2370"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/source.rs: FileTooLong \u2014 659 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 82% of them inside a single declaration: ParquetSource (4 blocks, 297-1308). The bar is 500 significant lines; this is 159 over it, 1.32\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/source.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3215de049664fe5b6f70d54851fb5b018d9d70fde4b472fb931b5dfd12877d8"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: RepartitionExec: ClassTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 14 methods, 6 blocks, lines 1519-2420. The bar is 400 significant lines; this is 126 over it, 1.32\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/mod.rs"},"region":{"startLine":1519}}}],"partialFingerprints":{"codehealthFindingId/v1":"7402f47765d5050a95a77f81492d7604c6420b8ac784cf4330f1eb334192e443"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/functions.rs: FileTooLong \u2014 656 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 156 over it, 1.31\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/functions.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"793dced3114ecd187b7d72a07898537b9a14906961b58debe0c7ab7005cdd364"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hash/utils.rs: FileTooLong \u2014 655 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 155 over it, 1.31\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/hash/utils.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"68cae188e9902cde94784d9783f0475b99f64da524f64b6b39379ee246bf41fd"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LogicalPlan.recompute_schema: MethodTooLong \u2014 recompute_schema runs 130 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 30 over it, 1.30\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1f9f6148607ce17cdeff52340020a0a5fbbe7c6b35d44bcca94a5cf3dc338b5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/extract_leaf_expressions.rs: FileTooLong \u2014 647 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 147 over it, 1.29\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/extract_leaf_expressions.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"24465aa3275ffe0b616e9ba4f652faeadfe0d12c6957a8586c5cdb31c6eca1b4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/planner.rs: FileTooLong \u2014 647 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 147 over it, 1.29\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/planner.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3b3ddbaee0ed9f8cd0a50ab3a461f3e2f22ad499b7b00b8ffa4d225b685c556"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlDisplay.fmt: MethodTooLong \u2014 fmt runs 129 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 29 over it, 1.29\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3303}}}],"partialFingerprints":{"codehealthFindingId/v1":"480a447990e1ef54a834d59ddbdc6edadbe6b7e7a57512fd1ad5361dfa345a9c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/percentile_cont.rs: FileTooLong \u2014 643 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 143 over it, 1.29\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/percentile_cont.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af0f7f8aa9f075a7a0084f30920b27abd5e1255dd2d94e1d5a2135ff046712e3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/aggregate.rs: FileTooLong \u2014 642 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 142 over it, 1.28\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/aggregate.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"581844715e280c48392b54fc538b21d4b20fbb025f08e2f601f5f3b6925c6fd8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlToRel.aggregate: MethodTooLong \u2014 aggregate runs 128 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 28 over it, 1.28\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":1223}}}],"partialFingerprints":{"codehealthFindingId/v1":"81f1f61f2e7ecad8c47225b4ef92c16df0dd6a1ed616c6b037d33eaaf433d117"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: BinaryExpr: ClassTooLong \u2014 510 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 10 methods, 8 blocks, lines 59-1215. The bar is 400 significant lines; this is 110 over it, 1.28\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"f358ae15eae3dc4dafd1beffd8da10c50b8bbcf1816b359d2194d5b2ce4bd88a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: piecewise_merge_join/exec.rs: FileTooLong \u2014 636 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 70% of them inside a single declaration: PiecewiseMergeJoinExec (5 blocks, 276-983). The bar is 500 significant lines; this is 136 over it, 1.27\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/piecewise_merge_join/exec.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"009523d95eea7ceacdf0550324668969f3394d4f5826ace35de6f6a5add4c22d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TypeSignature.to_string_repr_with_names: MethodTooLong \u2014 to_string_repr_with_names runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/signature.rs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6a4037e31527fa8bfbc00f8451f3830c34e49de019a553dcef5cb5e31855e6d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_optimizer::eliminate_join::rewrite_node: FunctionTooLong \u2014 datafusion_optimizer::eliminate_join::rewrite_node runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/eliminate_join.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a5666aa7c0379dc6a31aa7437679414f171fde3f070868c99176198e7daf600"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_pruning::pruning_predicate::build_predicate_expression: FunctionTooLong \u2014 datafusion_pruning::pruning_predicate::build_predicate_expression runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":1732}}}],"partialFingerprints":{"codehealthFindingId/v1":"58e0e6410adf16d5e67618fc103bc96c53a15774d36a42278ac066c40eecc31c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ConversionSpecifier.format_hex_float: MethodTooLong \u2014 format_hex_float runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1432}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a850a6959e5adc9d363db029ccf63678dcfa858fa990c47dde38f60e08a8021"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlToRel.create_default_relation: MethodTooLong \u2014 create_default_relation runs 127 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 27 over it, 1.27\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/relation/mod.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d940f17c0c9438ad2665bec3c8e0fd8ce7ffb517acd595a637a0b0953e48658"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: datafusion_functions::math::expr_fn: TooManyFunctions \u2014 38 free functions. The bar is 30 free functions; this is 8 over it, 1.27\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/mod.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"43f256057d5a3a830667657bb8c97209508a28c85f119fe35cd9a6b1078968bd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/sink.rs: FileTooLong \u2014 632 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 132 over it, 1.26\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/sink.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2711bc6e3fce56d95337307b03ff31dbb856e7c04e77d0c6adb18f8c85f5a65"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DefaultPhysicalPlanner.handle_explain: MethodTooLong \u2014 handle_explain runs 126 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 26 over it, 1.26\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":2860}}}],"partialFingerprints":{"codehealthFindingId/v1":"06a5528a1baad5ca334a2f0dfec269c7b3f928c8ada573adde08f70cfc26dfce"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_optimizer::decorrelate_predicate_subquery::build_join: FunctionTooLong \u2014 datafusion_optimizer::decorrelate_predicate_subquery::build_join runs 126 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 26 over it, 1.26\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate_predicate_subquery.rs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"b132fa24a05f2694f7bf66d3ea11ebfe36d034daf929cf1f7b226c82d2949ca5"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DFSchema: ClassTooLong \u2014 502 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 49 methods, 9 blocks, lines 113-1277. The bar is 400 significant lines; this is 102 over it, 1.26\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"e212b31d195214b563aa1de63144d2c2f2392b67274dc3ed3b193bb5e6bb3e81"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/error.rs: FileTooLong \u2014 625 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 125 over it, 1.25\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/error.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e7a0c09e28cc23ba691f07ab8cb4c1279d42e17867746a056fe648b4e1d72a7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ParquetMetadataFunc.call_with_args: MethodTooLong \u2014 call_with_args runs 125 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 25 over it, 1.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/functions.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"719be936879f7bd666dae66109f727bd4ad36e36013553c20e47d5955b0617be"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: JsonOpener.open: MethodTooLong \u2014 open runs 125 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 25 over it, 1.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-json/src/source.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b743b8f4b17b41ac3c64ebcda2b83b814a54687aa092bc7babf15fca54ea4ff"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PropagateEmptyRelation.rewrite: MethodTooLong \u2014 rewrite runs 125 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 25 over it, 1.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/propagate_empty_relation.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"29ee3b446dd0f7f49d06eaa559141cc9260ffdf9b8c94dace588855c26e02da1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_plan::joins::utils::estimate_join_cardinality: FunctionTooLong \u2014 datafusion_physical_plan::joins::utils::estimate_join_cardinality runs 125 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 25 over it, 1.25\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a02291593b1ac91fc7ba5d13558e32509167048a5a7cb38a20efc8c2b940087"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: multi_group_by/mod.rs: FileTooLong \u2014 624 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 63% of them inside a single declaration: GroupValuesColumn (3 blocks, 181-1312). The bar is 500 significant lines; this is 124 over it, 1.25\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d523ff187032af109cfd1304712bccb32fcd1ae820a0732d2816ebb6d5693048"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/file_format.rs: FileTooLong \u2014 622 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 122 over it, 1.24\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/file_format.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b4b30722a6e3ed78f79b3e69cfd486064dd91a4514ccf826105ff0b09c83510"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/projection.rs: FileTooLong \u2014 617 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 117 over it, 1.23\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/projection.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1544eb0d090bb0b514b8f0a5fc8d61fc8183faaa95f621b7e3835222c9a8c517"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: BinaryTypeCoercer.signature_inner: MethodTooLong \u2014 signature_inner runs 122 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 22 over it, 1.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"130838483d345176d91e7ad243e44f27900ab57454d04ded9bf93f76aaff123b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ConcatWsFunc.invoke_with_args: MethodTooLong \u2014 invoke_with_args runs 122 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 22 over it, 1.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/concat_ws.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"379715519f01d0dbae71ecf5cd63ded39e3d0e54f5aca5ceb6bc0eb92ee68c59"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: SqlToRel.insert_to_plan: MethodTooLong \u2014 insert_to_plan runs 122 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 22 over it, 1.22\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":2806}}}],"partialFingerprints":{"codehealthFindingId/v1":"0394570c18f55fc6538eb12f3016e635287e70c9f1d8b685490903197c4769da"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/stats.rs: FileTooLong \u2014 609 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 109 over it, 1.22\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfc0e787a6486e9eb17fe925dac38bb6ad1511c75409ebe8961502c9d04634c9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/union.rs: FileTooLong \u2014 608 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 108 over it, 1.22\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/union.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e168d262e368e90cbb1f82a941aa32971be226a0f8b411d77587248461bf7b2c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/memory.rs: FileTooLong \u2014 607 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 73% of them inside a single declaration: MemorySourceConfig (4 blocks, 58-780). The bar is 500 significant lines; this is 107 over it, 1.21\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/memory.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4e45d0cb15c8b50ed2bfee835e7d6213a8a16b57eb9d6badcac2ae01b960d8e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/min_max.rs: FileTooLong \u2014 606 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 106 over it, 1.21\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad418095b1f7229364b3836b27410a2cce713fd7ce9a02ecca1b64f8276f9460"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_functions_nested::string::compute_array_to_string: FunctionTooLong \u2014 datafusion_functions_nested::string::compute_array_to_string runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"1870a58d292ee3551d74820ac05092a85004b08274f6f6acd8354d3ca68da99d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_macros::user_doc::user_doc: FunctionTooLong \u2014 datafusion_macros::user_doc::user_doc runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/macros/src/user_doc.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"972dd907be19a1c48e9fb5e987139298374541258dda70b0ba6407538f745c54"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/min_max.rs: FileTooLong \u2014 600 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 100 over it, 1.20\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/min_max.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"36b576b2fd534ae11d3f30da76f76fed9a0bc09c60e83e9e9f6b783e612cb8bd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: unparser/ast.rs: FileTooLong \u2014 600 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 100 over it, 1.20\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/ast.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f262f4300ce6e6a351fe86403aa0788c2b959f4cb4938fe1f135fb2a77684b5f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: NativeType.default_cast_for: MethodTooLong \u2014 default_cast_for runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/types/native.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"3209df6ef33812055dc3bbeb2347f12025e16d146a7e3422ffe42b50182288c2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: metrics/value.rs: FileTooLong \u2014 598 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 98 over it, 1.20\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/metrics/value.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b261c7d89162b60b475fccdb9c6b80853d84db28ef84a5411d1cd4b18d9cac3"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ParquetMorselizer.prepare_open_file: MethodTooLong \u2014 prepare_open_file runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/opener/mod.rs"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7b9e2460ec07f16b8021c2bb60b14b25e3a682bb8f51398526f4d18f0f0dac1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Unparser.unparse_table_scan_pushdown: MethodTooLong \u2014 unparse_table_scan_pushdown runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":2515}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b7cd83fa800a1c5966ad344b70dbb49c00db6f349eca8d9de45f5512f777ca2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: datetime/to_timestamp.rs: FileTooLong \u2014 593 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 93 over it, 1.19\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/to_timestamp.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea95772cb4cee0e56928ca5984428d9b64fef603586ac1f015e322a81eea43a9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/approx_distinct.rs: FileTooLong \u2014 591 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 91 over it, 1.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/approx_distinct.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba850fd885835a769feeb5ef716eeffc4b5366142e28a353c46889417a42c2a0"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ListingTable.scan_with_args_inner: MethodTooLong \u2014 scan_with_args_inner runs 118 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 18 over it, 1.18\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/table.rs"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"60fe01001f63a60fdccfeb18130fa8684c1daa82629eee292ecd40aec3b32ad2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RoundFunc.invoke_with_args: MethodTooLong \u2014 invoke_with_args runs 118 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 18 over it, 1.18\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"a016cd869f98640defbe3a5ac3cffff1b008644752df79574a975fa95efec084"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: memory/table.rs: FileTooLong \u2014 589 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 89 over it, 1.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/memory/table.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd30af0bbe932ffb85c6cb03cb4a989a483b4204eb9dfb4e5ee627188dc52bbe"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/generate_series.rs: FileTooLong \u2014 587 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 87 over it, 1.17\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-table/src/generate_series.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f800e6b172c59bc5c505489b351cb2b11d8102cdebfd0b9388434c4c5cf9987e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: datetime/date_trunc.rs: FileTooLong \u2014 585 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 85 over it, 1.17\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_trunc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"11c5c6a39953772422a63aac70729dacda1f26c99c7ef7c9c83e2b8d2c365e71"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.eq: MethodTooLong \u2014 eq runs 117 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2bf3fa340fd172315fd5d0b1d674767d3d74ead885cae9337ae6ddc46c0660d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: FileScanConfig.try_from_proto: MethodTooLong \u2014 try_from_proto runs 117 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_scan_config/proto.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"be2514c58b033ac52c03da41c39d09635b5f4753ff742349d72974ffda0ee681"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_functions_nested::arrays_zip::arrays_zip_inner: FunctionTooLong \u2014 datafusion_functions_nested::arrays_zip::arrays_zip_inner runs 117 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/arrays_zip.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2046e0952973d5cda415b8dd69774930397baca985ca356af5cc7a798da8781"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_plan::aggregates::group_values::multi_group_by::make_group_column: FunctionTooLong \u2014 datafusion_physical_plan::aggregates::group_values::multi_group_by::make_group_column runs 117 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 17 over it, 1.17\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":959}}}],"partialFingerprints":{"codehealthFindingId/v1":"8741ff0dc0d50df90d3ae36f0d39474a9e51e2eccacb8c66d04e86ef9693b052"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Interval: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/interval_arithmetic.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8a278be14946f8f18f69a4d3026e36bd64c7ef0a2f82dbe88b82a58b1d53b61"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AggregateUDF: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/udaf.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"bee22ebe4ab3299de6fb5bb5abe161b7b25f8de491dae7034c26e729b642b55f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: NestedLoopJoinExec: ClassTooLong \u2014 466 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 12 methods, 6 blocks, lines 217-1137. The bar is 400 significant lines; this is 66 over it, 1.17\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec1351676e7df310826822c42c0add40824761313ce2177f1d97c61864a5415b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_plan::joins::hash_join::stream::mark_null_candidates_for_probe_batch: FunctionTooLong \u2014 datafusion_physical_plan::joins::hash_join::stream::mark_null_candidates_for_probe_batch runs 116 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 16 over it, 1.16\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/stream.rs"},"region":{"startLine":1385}}}],"partialFingerprints":{"codehealthFindingId/v1":"0662850e1c8df338f876e5ea63421e02b6f681c7922ec570950e01e484627eaf"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: FileScanConfig: ClassTooLong \u2014 462 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 18 methods, 5 blocks, lines 153-1635. The bar is 400 significant lines; this is 62 over it, 1.16\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_scan_config/mod.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"f42e54a8a09824f90063b34936a052e0e5e6d7fa90466839b394eb518770c6a2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: logical_plan/from_proto.rs: FileTooLong \u2014 576 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 76 over it, 1.15\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a32afc10b7bb330fc4346aafbb3ab3cfec225712b5583dab42f522d5f49c65ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_requirement_to_children: FunctionTooLong \u2014 datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_requirement_to_children runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ba2a695c81b89facff5eb0a69305cccc9abbae69094e69b106f697d0fc02fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_substrait::logical_plan::consumer::utils::rename_data_type: FunctionTooLong \u2014 datafusion_substrait::logical_plan::consumer::utils::rename_data_type runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/utils.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd4f96a29b7500e54aa563eb75a4d56d61f7194a94f4a961482a5d2dd1e72547"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarValue.arithmetic_negate: MethodTooLong \u2014 arithmetic_negate runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":2335}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d12d8128548c1c906aa5a08cd6a7491599af845a3c59a67d06c907c5f24d2e1"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AsOfJoinExec: ClassTooLong \u2014 454 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 4 methods, 6 blocks, lines 143-759. The bar is 400 significant lines; this is 54 over it, 1.14\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"13b03d8bc0404010ab023f995d38b6bcdeb06dc53ea91d11751fb212fd029f44"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_datasource::write::demux::compute_partition_keys_by_row: FunctionTooLong \u2014 datafusion_datasource::write::demux::compute_partition_keys_by_row runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/write/demux.rs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"42b53729ff0e2f394186fa7cf4506e11a11abc865cf4ddada235dba6bfa2511a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GroupsAccumulatorAdapter.invoke_per_accumulator_with_scratch: MethodTooLong \u2014 invoke_per_accumulator_with_scratch runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/groups_accumulator.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2100e36db21c54f8733ed43442382b49b79df1406b469ae2cfaf0ae66ecff1e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tree_node.rs: FileTooLong \u2014 560 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 60 over it, 1.12\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/tree_node.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"afa47f7c54f63a6ef00ef168ef25915a63754fe4f73f122fd78b7d8a2a885cc2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/count.rs: FileTooLong \u2014 560 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 60 over it, 1.12\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/count.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb40f1a7833a4b61ad499a64a8913f4a452b37b56e18b1575e2f7d4abd66ecac"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DFParquetMetadata.statistics_from_parquet_metadata: MethodTooLong \u2014 statistics_from_parquet_metadata runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/metadata.rs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"f02b3c02ce367b94e4b7b733299076cb24cddb8c9e9fdb2cac22009332750160"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_datasource_parquet::schema_coercion::coerce_int96_to_resolution_impl: FunctionTooLong \u2014 datafusion_datasource_parquet::schema_coercion::coerce_int96_to_resolution_impl runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/schema_coercion.rs"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"9df4b42f6725da2439681324b4bab915e898e46ec73b6149d7d3ca1b97fcf964"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_optimizer::extract_leaf_expressions::split_and_push_projection: FunctionTooLong \u2014 datafusion_optimizer::extract_leaf_expressions::split_and_push_projection runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/extract_leaf_expressions.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"38cfeef29f03d74a3be1198cce4204762b6f1eb0781adc0652625d89821f0c8b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_plan::windows::window_equivalence_properties: FunctionTooLong \u2014 datafusion_physical_plan::windows::window_equivalence_properties runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/mod.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1466b73fcd0724500d1d9f8995c77471530ec29bb8123f1aa2c54164a8e7d23"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: DFParser.parse_create_external_table: MethodTooLong \u2014 parse_create_external_table runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":1207}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfb5dee16c140dce416e17aadc55d64235bbc62ca0532f9db127efe207dbe0de"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: MemorySourceConfig: ClassTooLong \u2014 444 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 16 methods, 4 blocks, lines 58-780. The bar is 400 significant lines; this is 44 over it, 1.11\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/memory.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a03292bb37d3e81d3e3d9c706f00bbd73596934f31b299c7b3631693cfb9179"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: NestedLoopJoinStream.process_left_range_join: MethodTooLong \u2014 process_left_range_join runs 111 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 11 over it, 1.11\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3186}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc3d7ed91bca77db8839c6970d2a961a9bfa7e700bd0519973ee6872d41369c1"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: PiecewiseMergeJoinExec: ClassTooLong \u2014 443 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 11 methods, 5 blocks, lines 276-983. The bar is 400 significant lines; this is 43 over it, 1.11\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/piecewise_merge_join/exec.rs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"29d2b2dcdc682b5d3686a35deadbaa7e4021a4788b03dab04dd1a4683130090d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: RepartitionExec.execute: MethodTooLong \u2014 execute runs 110 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 10 over it, 1.10\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/mod.rs"},"region":{"startLine":1734}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff4aa2fa8099df963fb4a000eab550259d403441e6390dc79462a0aae548e882"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: logical_plan/ddl.rs: FileTooLong \u2014 547 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 47 over it, 1.09\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/ddl.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa73535b69ed80b941213bb1349940bddf5d28840f4477c874447527980824ca"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ArrowFileOpener.open: MethodTooLong \u2014 open runs 109 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 9 over it, 1.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-arrow/src/source.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a89c3ec62b33107825fa31ec10518af1b582c1e953f3f76581890a6d8a35fc0"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: MultiLevelMergeBuilder.merge_sorted_runs_within_mem_limit: MethodTooLong \u2014 merge_sorted_runs_within_mem_limit runs 109 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 9 over it, 1.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"490d854f6025c154cc63df619e18e20aa1aec31a91b696db91aa9778a5a77a5b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PhysicalPlanNodeExt.try_into_physical_plan_with_context: MethodTooLong \u2014 try_into_physical_plan_with_context runs 109 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 9 over it, 1.09\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/mod.rs"},"region":{"startLine":1165}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aa6bacd96571bb4c3f520e6e51546e5cd78d02424fd501ed64c2955f15269b8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/higher_order_function.rs: FileTooLong \u2014 543 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 43 over it, 1.09\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"02aa2f54fb8454fe60af7663d1b885ed16b1b1ef8eb008fb22ad45448316425d"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_proto::physical_plan::from_proto::parse_physical_expr_with_converter: FunctionTooLong \u2014 datafusion_proto::physical_plan::from_proto::parse_physical_expr_with_converter runs 108 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 8 over it, 1.08\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/from_proto.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"caa8a29f2ff374d874a4d65d4b3a3a89f0883ab14621ad4e5bfe915d2cf41083"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/string.rs: FileTooLong \u2014 536 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 36 over it, 1.07\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3879b4a370c79115dc942faf72132975abd25fc414bbef87db4b0728316d7a0a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_optimizer::ensure_requirements::enforce_distribution::adjust_input_keys_ordering: FunctionTooLong \u2014 datafusion_physical_optimizer::ensure_requirements::enforce_distribution::adjust_input_keys_ordering runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22a1bc8777409efa36ff94939ba5c3c60d0169c9a5505bf6ed80a346a4c8735"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: AggregateStream.new: MethodTooLong \u2014 new runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/aggregate_stream.rs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d6ab72fb8510cd339d86b6bc7a99c79eb0914643f66b4027e7ca4680153a9b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_sql::statement::calc_inline_constraints_from_columns: FunctionTooLong \u2014 datafusion_sql::statement::calc_inline_constraints_from_columns runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"97745d8bafc64a95698d3f80fa4d317ef754afb6e3858f8f9ebf9579074e2c31"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: HashJoinStream: ClassTooLong \u2014 427 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 10 methods, 4 blocks, lines 356-1668. The bar is 400 significant lines; this is 27 over it, 1.07\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/stream.rs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5219775e5e0a2a04b87eb37f838e1280f9cfec8da62e4c243140489e5b85879"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: datetime/date_bin.rs: FileTooLong \u2014 533 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 33 over it, 1.07\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_bin.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b67a36dd068c6c58a4ba737be0dbc4635bb3f92d923af294a7475f4dfd6fa298"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: object_storage/instrumented.rs: FileTooLong \u2014 532 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 32 over it, 1.06\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/object_storage/instrumented.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4aa27b3c43cdb41b87612cdf0c0bcae882312d873eb28d6d8f6914b394f9128"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/expr_fn.rs: FileTooLong \u2014 530 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 48 free functions. The bar is 500 significant lines; this is 30 over it, 1.06\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_fn.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a319eabb1dc24c7a0b2b0f2e85be0ca90ce49b705233831679e3841802d630f6"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ParquetSink.spawn_writer_tasks_and_join: MethodTooLong \u2014 spawn_writer_tasks_and_join runs 106 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 6 over it, 1.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/sink.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"69e79c5d6cb491512ea1625756d2a40af255712f4bd4345ea618f409f8c34304"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_expr::higher_order_function::resolve_higher_order_function: FunctionTooLong \u2014 datafusion_expr::higher_order_function::resolve_higher_order_function runs 106 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 6 over it, 1.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8e1d5a9439f100457d55c896f0698955f18bfa4efbfb513508ac3d887398aa6"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Unparser.asof_join_to_sql: MethodTooLong \u2014 asof_join_to_sql runs 106 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 6 over it, 1.06\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":1929}}}],"partialFingerprints":{"codehealthFindingId/v1":"8408530fc8793d89c29714e02c70b3da0135e1d1ac696743b59153221289afa0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/regr.rs: FileTooLong \u2014 527 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 27 over it, 1.05\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/regr.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2caac1e1b7c8f0feff1e2e84a90389e3d23db002b430a699bf2c3f600619ee97"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_functions::unicode::rpad::rpad_impl: FunctionTooLong \u2014 datafusion_functions::unicode::rpad::rpad_impl runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/rpad.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"69068f06f932009f1159cc51d66e99bc7099f6905f6f2a95fdd6bef2280b3746"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScalarSubqueryToJoin.rewrite: MethodTooLong \u2014 rewrite runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/scalar_subquery_to_join.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9f74116cb765fab8669b4766482499b4077d190bf440ff2bf498d0ccf27c579"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: physical_expr/mod.rs: FileTooLong \u2014 523 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 23 over it, 1.05\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/physical_expr/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ccf4938af4f7a4587c0d17603889f6ebf687592061ac400fd8bd130b05cfee4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/page_filter.rs: FileTooLong \u2014 520 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 20 over it, 1.04\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/page_filter.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"becb659c6ebb61ddfa7efd16bda6779ef2c3271871d9efe7da06b14b6de4d182"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ScanState.poll_scan: MethodTooLong \u2014 poll_scan runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_stream/scan_state.rs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4bd645fbd04f040a4a45d0b7439d570ed07d1b2af6f47488229538f62511967"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_plan::aggregates::group_values::row::encode_array_if_necessary: FunctionTooLong \u2014 datafusion_physical_plan::aggregates::group_values::row::encode_array_if_necessary runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/row.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"61a8087733b519b2abdcb64af5f15e9cd74e6cdd0d47cec3b07714c130bd9b7d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sorts/partial_sort.rs: FileTooLong \u2014 519 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 19 over it, 1.04\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/partial_sort.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9edcc3f91360ed58813fa524331cf6515b4c34734847f865d4458da0ddadcbf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SelectBuilder: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\u00D7 the bar. This type is on a published API surface \u2014 a cargo-semver-checks gate in CI (.github/workflows/breaking_changes_detector.yml) declares its compatibility contractual \u2014 so moving members onto a smaller type is a breaking change for every consumer, not a local refactor. To reduce it, treat the split as an API migration: move each cohesive group onto its own published type and keep the old members as deprecated forwards for a deprecation period, removing them at the next compatibility break. Where the surface has to stay as it is, that is a decision to record rather than a change to make."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/ast.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b1d599b31141555fb176dcf684c8a50a846627b54b05297ea5dc0a5abea6cb0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: BitwiseSortMergeJoinStream: TooManyFields \u2014 31 stored fields beside 30 methods. The bar is 30 stored fields; this is 1 over it, 1.03\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bc43dc766e5ea0b50bc87bfb9abd7b252daaa9b7bfb637bf47c55a131fc5652"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: session/mod.rs: FileTooLong \u2014 516 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 16 over it, 1.03\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/session/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"12fc84fcbed556bae2a634a670d4db74a898eb7be9033f7c91b58f9c6723e442"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/table_provider.rs: FileTooLong \u2014 516 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 16 over it, 1.03\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/table_provider.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f929249169b7f6eb7694f69af67d87a74a6ab2ba00230141b16441f23b909e63"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/statistics.rs: FileTooLong \u2014 515 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 15 over it, 1.03\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de1b1e26469133d7b75376a523a19033caf7af5ce611e3e8f0c11ad6e5261f53"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: aggregate_hash_table/common.rs: FileTooLong \u2014 512 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 12 over it, 1.02\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"442cc699cedce62410d122758c8dff099d65b2587dd4e415d84f81d2a3c1127e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_physical_optimizer::filter_pushdown::push_down_filters: FunctionTooLong \u2014 datafusion_physical_optimizer::filter_pushdown::push_down_filters runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/filter_pushdown.rs"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f8822949ea5089bc51676fb0b8141e71515241b3e58517b62a8d766308aa78"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/partitioning.rs: FileTooLong \u2014 508 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 8 over it, 1.02\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/partitioning.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cdd4a9a33669766dbd2ee7205a2cb94a98ac292320b19b9f952e9f9a71cb46c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: MultiLevelMergeBuilder: ClassTooLong \u2014 405 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 11 methods, 3 blocks, lines 144-872. The bar is 400 significant lines; this is 5 over it, 1.01\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"d82532a82eb8e7ab53a980a1e1e0cd15d783c4e728ec50438f2a77d8d55c7ce3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: datafusion_functions::unicode::lpad::lpad_impl: FunctionTooLong \u2014 datafusion_functions::unicode::lpad::lpad_impl runs 101 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 1 over it, 1.01\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"02b7cf0d34efa2030bad9131f9def99a69a6da424d3e123ca94a8c04715410a7"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: GroupedHashAggregateStream.poll_next: MethodTooLong \u2014 poll_next runs 101 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 1 over it, 1.01\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"243943f1ed432a4d97283272afa8477cb44bc8c1e285ed3be8cf22d340f12647"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: operator_statistics/mod.rs: FileTooLong \u2014 504 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 4 over it, 1.01\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/operator_statistics/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9041ae2b7922e313d61319de52bc3b0a555e487ff45598d5e19f60e95fe23972"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (5 members, 10 shared lines): datafusion/functions-nested/src/array_avg.rs:96-111 | datafusion/functions-nested/src/array_normalize.rs:102-117 | datafusion/functions-nested/src/array_product.rs:100-115 | datafusion/functions-nested/src/array_scale.rs:104-132 | datafusion/functions-nested/src/array_sum.rs:96-111 \u2014 These 5 members are variants of one another: a block of 10 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_avg.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d0c2427473426bbf847e4bbcaa3c7d33b90e97b95447a09cd71f559ba0eaf6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (4 members, 26 shared lines): datafusion-cli/src/object_storage.rs:398-433 | datafusion-cli/src/object_storage.rs:483-520 | datafusion/common/src/config.rs:2318-2349 | datafusion/common/src/config.rs:3079-3110 \u2014 These 4 members are variants of one another: a block of 26 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/object_storage.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cc46c442643bd0b07ba5ec22873ee6d3c0a37419a7fc8fbd300aeeeab3d7cc2"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (88 shared lines): datafusion/functions/src/unicode/lpad.rs:375-513 | datafusion/functions/src/unicode/rpad.rs:374-516 \u2014 These two members are variants of one another: 88 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b71da9c7f8db11f5c74b0d3ff2b8e28a68b22eda43eb3ac65fd741d5aa170b"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (53 shared lines): datafusion/functions/src/string/ends_with.rs:93-160 | datafusion/functions/src/string/starts_with.rs:89-156 \u2014 These two members are variants of one another: 53 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/ends_with.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b1d8c98e5cd89606aedc9be1f44d9c9ec4fc78259d180a83c849bacc2ef8921"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (46 shared lines): datafusion/functions/src/unicode/lpad.rs:110-173 | datafusion/functions/src/unicode/rpad.rs:110-173 \u2014 These two members are variants of one another: 46 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"a33342a11da0681b9ed50adaa0ec48720c5126c619e9547d8a9a8c71751a9134"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (40 shared lines): datafusion/physical-expr/src/expressions/case.rs:783-922 | datafusion/physical-expr/src/expressions/case.rs:929-1008 \u2014 These two members are variants of one another: 40 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/case.rs"},"region":{"startLine":783}}}],"partialFingerprints":{"codehealthFindingId/v1":"865455c4873e43c6dc640d4798fc69087793ef229c0d982c1f43463f14455867"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (38 shared lines): datafusion/datasource-csv/src/source.rs:504-557 | datafusion/datasource-json/src/source.rs:563-612 \u2014 These two members are variants of one another: 38 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/source.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"61b2afe9133bb034af7d2052c92be715fb9470c576b9214a59221ecb5f769cc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (35 shared lines): datafusion/spark/src/function/datetime/make_dt_interval.rs:139-197 | datafusion/spark/src/function/datetime/make_interval.rs:130-223 \u2014 These two members are variants of one another: 35 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/make_dt_interval.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"a994765d6d3f571cdeb846e2b0f0b5b8edce1d174bc4528742cceefb22705680"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (31 shared lines): datafusion/physical-plan/src/display.rs:282-327 | datafusion/physical-plan/src/display.rs:484-525 \u2014 These two members are variants of one another: 31 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"88d45fe2633f9b7ebc4e7365817ff32cabee14bdbe563a0b11105a8d509f3867"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (22 shared lines): datafusion/common/src/dfschema.rs:678-743 | datafusion/common/src/dfschema.rs:750-829 \u2014 These two members are variants of one another: 22 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":678}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a9a9afa2640cc5f192f9f2891210a243dd6082b436c4b5d258eace24275cee8"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (19 corresponding lines): datafusion/functions/src/unicode/find_in_set.rs:277-298 | datafusion/functions/src/unicode/find_in_set.rs:305-325 \u2014 These two members are one piece of code written twice and then edited apart: 19 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/find_in_set.rs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ee60e626dae3fcfbfcf191ff963b18283479c62b1bc4c416728f962bd6f7734"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (26 corresponding lines): datafusion/physical-expr/src/simplifier/const_evaluator.rs:50-81 | datafusion/physical-expr/src/simplifier/const_evaluator.rs:96-155 \u2014 These two members are one piece of code written twice and then edited apart: 26 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/simplifier/const_evaluator.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"797340d0bd888fc8af7bdb5e2f2c2825fb5006ddc98b49eef1ffc97e735d006a"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (33 corresponding lines): datafusion/spark/src/function/datetime/from_utc_timestamp.rs:103-139 | datafusion/spark/src/function/datetime/to_utc_timestamp.rs:105-141 \u2014 These two members are one piece of code written twice and then edited apart: 33 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/from_utc_timestamp.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"f206c380cab45243c2add27a111089c12c3b69f8e0638ae2f9522d06bc584f41"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (13 corresponding lines): datafusion/common/src/stats.rs:100-112 | datafusion/common/src/stats.rs:117-129 \u2014 These two members are one piece of code written twice and then edited apart: 13 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"8878144c8ed402a60d94826f7104ca60e805137149055d639b6bae3577c59fbf"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (18 corresponding lines): datafusion/common/src/config.rs:2253-2285 | datafusion/common/src/config.rs:2291-2315 \u2014 These two members are one piece of code written twice and then edited apart: 18 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/config.rs"},"region":{"startLine":2253}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f3a1de3624a6db451016a6b768001009dd4a55cb16887a70cff964d95752965"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (11 members, 50\u002B identical tokens): datafusion/physical-plan/src/aggregates/mod.rs:2210-2233 | datafusion/physical-plan/src/async_func.rs:178-191 | datafusion/physical-plan/src/buffer.rs:176-188 | datafusion/physical-plan/src/coalesce_batches.rs:188-201 | datafusion/physical-plan/src/coalesce_partitions.rs:165-179 | datafusion/physical-plan/src/filter.rs:599-615 | datafusion/physical-plan/src/limit.rs:184-199 | datafusion/physical-plan/src/limit.rs:465-480 | datafusion/physical-plan/src/sorts/sort_preserving_merge.rs:301-314 | datafusion/physical-plan/src/unnest.rs:244-260 | datafusion/physical-plan/src/windows/window_agg_exec.rs:269-283 \u2014 These 11 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 11 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 11 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2210}}}],"partialFingerprints":{"codehealthFindingId/v1":"72ec7eefecd82c62ff041e28c89ee705b28a18e1f170aca5209169810b927c9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): datafusion/ffi/src/catalog_provider.rs:236-246 | datafusion/ffi/src/catalog_provider_list.rs:200-210 | datafusion/ffi/src/schema_provider.rs:246-256 | datafusion/ffi/src/table_provider.rs:551-566 | datafusion/ffi/src/table_provider_factory.rs:104-114 | datafusion/ffi/src/udtf.rs:204-215 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/catalog_provider.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaa638788ed21e90626ed15c684dd2756850a183f94920da1ab213c7bc7b1431"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): datafusion/ffi/src/query_planner.rs:140-177 | datafusion/ffi/src/table_provider.rs:292-330 | datafusion/ffi/src/table_provider.rs:337-367 | datafusion/ffi/src/table_provider.rs:373-404 | datafusion/ffi/src/table_provider.rs:411-470 | datafusion/ffi/src/table_provider.rs:475-496 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/query_planner.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"266b48c364e5f06f58357e090920b08aad78bcf14156e85ffc7bf3b0cfdae4dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): datafusion/functions-nested/src/string.rs:204-222 | datafusion/functions/src/crypto/digest.rs:71-87 | datafusion/functions/src/regex/regexplike.rs:82-99 | datafusion/functions/src/string/btrim.rs:91-110 | datafusion/functions/src/string/ltrim.rs:96-114 | datafusion/functions/src/string/rtrim.rs:96-114 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"73dbf94ff70e55a0eac4a9184a0adb818d142fe10d74c8abaf053e5732396afa"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): datafusion/functions/src/math/abs.rs:175-188 | datafusion/functions/src/math/monotonicity.rs:344-357 | datafusion/functions/src/math/monotonicity.rs:447-458 | datafusion/functions/src/math/monotonicity.rs:485-496 | datafusion/functions/src/math/monotonicity.rs:523-534 | datafusion/functions/src/math/monotonicity.rs:650-661 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/abs.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dfcede55083035cfbd23386184a0f62bcfe822907021a3001866b99c4a3fae9"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): datafusion/datasource/src/memory.rs:710-779 | datafusion/physical-plan/src/joins/asof_join.rs:672-758 | datafusion/physical-plan/src/joins/hash_join/exec.rs:2241-2356 | datafusion/physical-plan/src/joins/nested_loop_join.rs:991-1034 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:802-891 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/memory.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"af4481b2b3be2089c0e6444016185477222ca0b3209d70f2d97783a88c5df34f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): datafusion/spark/src/function/datetime/date_trunc.rs:76-84 | datafusion/spark/src/function/datetime/from_utc_timestamp.rs:88-96 | datafusion/spark/src/function/datetime/time_trunc.rs:70-78 | datafusion/spark/src/function/datetime/to_utc_timestamp.rs:90-98 | datafusion/spark/src/function/datetime/trunc.rs:77-85 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/date_trunc.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"b32dbb33693a50943ffbad24ff041460df79240b9fc4245ead1f6ebba2674095"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/common/src/scalar/mod.rs:4456-4467 | datafusion/common/src/scalar/mod.rs:4475-4486 | datafusion/common/src/scalar/mod.rs:4494-4505 | datafusion/common/src/scalar/mod.rs:4513-4524 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":4456}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e7d55830fa8e5a8135c833eed1ed310ca746c57e6311066e4a5c05301f136ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/core/src/execution/session_state.rs:2295-2301 | datafusion/core/src/execution/session_state.rs:2306-2313 | datafusion/core/src/execution/session_state.rs:2318-2324 | datafusion/core/src/execution/session_state.rs:2329-2335 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":2295}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4bf0f0601dc97466916489cb5e8f5ad361dd28308b05cc3f8a4a925ea0b8d63"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/core/src/execution/session_state.rs:2340-2349 | datafusion/core/src/execution/session_state.rs:2354-2364 | datafusion/core/src/execution/session_state.rs:2369-2378 | datafusion/core/src/execution/session_state.rs:2383-2392 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":2340}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad9c1d561eed5ad0513d65832c840e383ffffff3aeae054dc6a496a1a475c2c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/ffi/src/udaf/accumulator.rs:106-118 | datafusion/ffi/src/udaf/accumulator.rs:180-192 | datafusion/ffi/src/udwf/partition_evaluator.rs:113-132 | datafusion/ffi/src/udwf/partition_evaluator.rs:138-157 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/udaf/accumulator.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"421a2b80b9b850fd39ee13964d95e6d15380bc115176a096a5bdabaec7b74ed2"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/functions/src/math/nanvl.rs:69-100 | datafusion/functions/src/math/round.rs:184-222 | datafusion/functions/src/math/trunc.rs:80-117 | datafusion/spark/src/function/math/round.rs:60-106 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/nanvl.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7d319c79980f25901c0ea1d6ce47f452f06089a458740207c63f3b7bbdd7691"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/functions-aggregate/src/covariance.rs:287-310 | datafusion/functions-aggregate/src/covariance.rs:312-343 | datafusion/functions-aggregate/src/regr.rs:603-628 | datafusion/functions-aggregate/src/regr.rs:634-667 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/covariance.rs"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbfbb57cd8e5c2a68457fec5e25e773dc0fdd65d9e156c2535f2a68ff8b15c5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:215-230 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:295-310 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:388-403 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:482-497 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1d90a8e4d85b066b188b24453ea3d19b6d54de17caa4ce7d42760afa9e60977"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/physical-expr/src/aggregate.rs:743-757 | datafusion/physical-expr/src/aggregate.rs:841-906 | datafusion/physical-expr/src/aggregate.rs:911-924 | datafusion/physical-expr/src/aggregate.rs:931-944 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/aggregate.rs"},"region":{"startLine":743}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0f4aac9301c8da4053430d735b2939097b59d37a1b55e399554074fe018801d"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/physical-plan/src/filter.rs:465-521 | datafusion/physical-plan/src/joins/asof_join.rs:270-306 | datafusion/physical-plan/src/joins/hash_join/exec.rs:1329-1386 | datafusion/physical-plan/src/joins/nested_loop_join.rs:392-449 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/filter.rs"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"aec07c9b7920fb0bbc1759b8f5c86408c19e94f3b5e9c91d9922024a881f5404"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/physical-plan/src/joins/asof_join.rs:589-663 | datafusion/physical-plan/src/joins/hash_join/exec.rs:2127-2232 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:707-789 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:667-784 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"a544a23ae5e7f5471079f771d5a6e68dc452b00c66092b77e44301c710b60d94"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion/physical-plan/src/topk/mod.rs:359-392 | datafusion/physical-plan/src/topk/mod.rs:1332-1361 | datafusion/physical-plan/src/topk/mod.rs:1647-1677 | datafusion/physical-plan/src/topk/mod.rs:2142-2174 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"13cfe255fe469271651ce48008084d5f9737b72a9ac66d4a081b1deaf0e16a3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): datafusion-cli/src/functions.rs:322-463 | datafusion-cli/src/functions.rs:510-580 | datafusion-cli/src/functions.rs:627-710 | datafusion-cli/src/functions.rs:776-890 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/functions.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"a413fcbfecbfedd6e736b89d45a986c204010236d7b6bacd1b62f60d1f6dbf0d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (41\u201348 lines \u00D7 2): datafusion/expr/src/type_coercion/functions.rs:175-222 | datafusion/expr/src/type_coercion/functions.rs:266-306 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"07279db88f8840f761ab639d1dc6cf8966d1bf926f901bf9ee0c9c930d8bc665"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (37 lines \u00D7 2): datafusion/datasource/src/memory.rs:95-131 | datafusion/physical-plan/src/test.rs:87-123 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/memory.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"7880b293426415e31041296226f58732c63f46f6394d5c1216046f805afe5409"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2): datafusion/spark/src/function/math/width_bucket.rs:339-374 | datafusion/spark/src/function/math/width_bucket.rs:390-425 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/width_bucket.rs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"989020308876603ab024ab830f4569127f9dae1f211f597cf2b63cb8f5aaedc3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (33 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/single_group_by/bytes.rs:93-125 | datafusion/physical-plan/src/aggregates/group_values/single_group_by/bytes_view.rs:95-127 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/single_group_by/bytes.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6c48400cfc8e02c837ff548219ab2470de9d2e7678c12f5d32e568010d1120b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:251-282 | datafusion/functions/src/unicode/rpad.rs:252-283 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"b052495f8cd337333cb7cc809ecab329fd1e1110bafc7d9a5ab8b5249de6ed74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): datafusion/functions-aggregate/src/min_max.rs:248-279 | datafusion/functions-aggregate/src/min_max.rs:547-578 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"30e0e2bcab1cc1e2e038f34dad6b7625b73b38bd412a1b2ff528bda5902ed9e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29\u201331 lines \u00D7 2): datafusion/common/src/scalar/mod.rs:4800-4828 | datafusion/common/src/scalar/mod.rs:4934-4964 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":4800}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2129fd45f555bdc1c6523a4d18f8e7a4043583e8a3b2ff0e8518ae726653748"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): datafusion/core/src/dataframe/mod.rs:2181-2211 | datafusion/core/src/dataframe/mod.rs:2251-2281 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/dataframe/mod.rs"},"region":{"startLine":2181}}}],"partialFingerprints":{"codehealthFindingId/v1":"c08cfa94cf6f9dad0b4adfb7cadd164356416ce8ae2f55caf080402de79a59b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): datafusion/datasource-arrow/src/file_format.rs:312-341 | datafusion/datasource-avro/src/file_format.rs:277-306 \u2014 before extracting anything, compare \u0060datafusion/datasource-arrow/src/file_format.rs\u0060 and \u0060datafusion/datasource-avro/src/file_format.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-arrow/src/file_format.rs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"470b47cba31ca9be06b3048dc8283cc0aa0365bd51380c63e1d52e064ecbaff2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:205-234 | datafusion/functions/src/unicode/rpad.rs:205-234 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"a875425095367749db885997ee165afaf593452d7932e31f1042f8e0eed88821"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): datafusion/spark/src/function/datetime/from_utc_timestamp.rs:106-135 | datafusion/spark/src/function/datetime/to_utc_timestamp.rs:108-137 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/from_utc_timestamp.rs\u0060 and \u0060datafusion/spark/src/function/datetime/to_utc_timestamp.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 70 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/from_utc_timestamp.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"351466dfe60db5aafcf5179d8bad02a5f6f91f33dbfef67a21a44683477862ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26\u201328 lines \u00D7 2): datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs:489-516 | datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs:519-544 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"2747eebe93775c187c1c3839ed967627afa04fcc09ff834ea4379397369e7472"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26\u201327 lines \u00D7 3): datafusion/functions-aggregate/src/first_last.rs:211-236 | datafusion/functions-aggregate/src/min_max.rs:249-275 | datafusion/functions-aggregate/src/min_max.rs:548-574 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"1524de6a4f57cf61a7164528118fe378a69767b948dca74bb667729a67e9c9a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201327 lines \u00D7 2): datafusion/datasource/src/file_scan_config/mod.rs:1442-1458 | datafusion/datasource/src/file_scan_config/mod.rs:1515-1541 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_scan_config/mod.rs"},"region":{"startLine":1442}}}],"partialFingerprints":{"codehealthFindingId/v1":"67c441688ac7fd0d95e0f8652de1bbbfe5577655c2cb24729de2f59d2b9ba514"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): datafusion/functions-aggregate-common/src/aggregate/groups_accumulator/accumulate.rs:612-638 | datafusion/functions-aggregate-common/src/aggregate/groups_accumulator/accumulate.rs:647-673 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/groups_accumulator/accumulate.rs"},"region":{"startLine":612}}}],"partialFingerprints":{"codehealthFindingId/v1":"c98f79f68a717dcedf660c7cff15c6aebe9df4216d759862f5e2fa9d0bc2798d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 4): datafusion-cli/src/object_storage.rs:399-424 | datafusion-cli/src/object_storage.rs:484-509 | datafusion/common/src/config.rs:2319-2344 | datafusion/common/src/config.rs:3080-3105 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/object_storage.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"244cc9019066f5ac3db6e1072bbd4707d0e6e1d3002458976d73577b7987ad5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201326 lines \u00D7 2): datafusion/common/src/hash_utils.rs:413-438 | datafusion/common/src/hash_utils/build_hasher.rs:304-327 \u2014 before extracting anything, compare \u0060datafusion/common/src/hash_utils.rs\u0060 and \u0060datafusion/common/src/hash_utils/build_hasher.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1b92b6130812fcd38e9619560236617add0958553c63f5fd29e050c5cee61f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:394-419 | datafusion/functions/src/unicode/rpad.rs:393-418 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"50d2e5fbce933d299cb4bf7761e3192b1ad6811d58e489b5c2d1a969e839de40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201325 lines \u00D7 4): datafusion-cli/src/functions.rs:362-370 | datafusion-cli/src/functions.rs:516-537 | datafusion-cli/src/functions.rs:633-657 | datafusion-cli/src/functions.rs:797-821 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/functions.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"90ca86ad279741050c9d5cc7631deba8c6341a4edc893612a51a8ef6056daf95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): datafusion/expr/src/higher_order_function.rs:906-930 | datafusion/expr/src/udf.rs:95-119 \u2014 before extracting anything, compare \u0060datafusion/expr/src/higher_order_function.rs\u0060 and \u0060datafusion/expr/src/udf.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":906}}}],"partialFingerprints":{"codehealthFindingId/v1":"557b1c4ca48561ba1ffeb5c98354dfc5800818f9ba4d982ac80c7e87670eaf75"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): datafusion/expr/src/logical_plan/plan.rs:1627-1651 | datafusion/expr/src/logical_plan/plan.rs:1666-1690 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":1627}}}],"partialFingerprints":{"codehealthFindingId/v1":"676ccb9d6168db913e23f4688dadf4069a8906b13c987a362350bb4f0451ee78"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): datafusion/physical-expr/src/simplifier/const_evaluator.rs:57-81 | datafusion/physical-expr/src/simplifier/const_evaluator.rs:131-155 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/simplifier/const_evaluator.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5edb353b34dd90d967690c39255460303bca658da2c43b6e07688d4dfee47b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/single_group_by/bytes.rs:53-77 | datafusion/physical-plan/src/aggregates/group_values/single_group_by/bytes_view.rs:55-79 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/single_group_by/bytes.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"99599044bbcc446c1f812341ec35f10db7fd3c73887331c7eb6a4ee3927fead4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): datafusion/spark/src/function/datetime/make_dt_interval.rs:48-72 | datafusion/spark/src/function/datetime/make_interval.rs:45-69 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/make_dt_interval.rs\u0060 and \u0060datafusion/spark/src/function/datetime/make_interval.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/make_dt_interval.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"435aa4fe7ed6b98ce10e4ae41a4a039f2657d7277bc0572718cb4702b4188bf0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 3): datafusion/functions/src/datetime/to_timestamp.rs:610-633 | datafusion/functions/src/datetime/to_timestamp.rs:679-702 | datafusion/functions/src/datetime/to_timestamp.rs:748-771 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/to_timestamp.rs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfa58a0f091f8571d3581f207f527037c33a2b2f9da417fcd812acb8ecb027b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): datafusion/functions-aggregate/src/array_agg.rs:922-945 | datafusion/functions-aggregate/src/array_agg.rs:1120-1143 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":922}}}],"partialFingerprints":{"codehealthFindingId/v1":"819f2ddd85fba1b4f7f7090f528af78d2e5ab12c33a9a015acbe08a82dd8838c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): datafusion/functions-nested/src/cosine_distance.rs:162-185 | datafusion/functions-nested/src/inner_product.rs:168-191 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/cosine_distance.rs\u0060 and \u0060datafusion/functions-nested/src/inner_product.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 86 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/cosine_distance.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"581384e030aae06171435df05bae89ede21b025f77ba060843a9ac114645426d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201323 lines \u00D7 3): datafusion/functions/src/math/round.rs:192-208 | datafusion/functions/src/math/trunc.rs:86-108 | datafusion/spark/src/function/math/round.rs:67-87 \u2014 before extracting anything, compare \u0060datafusion/functions/src/math/round.rs\u0060 and \u0060datafusion/functions/src/math/trunc.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"b03a371e0d52b1e4564c9ec6ae9e35d050b92419f565a1da7ae68240bff34c47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201323 lines \u00D7 3): datafusion/physical-plan/src/topk/mod.rs:1398-1417 | datafusion/physical-plan/src/topk/mod.rs:1716-1735 | datafusion/physical-plan/src/topk/mod.rs:2220-2242 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1398}}}],"partialFingerprints":{"codehealthFindingId/v1":"755d2226f71deb281dc346ef7c9ca4adcaf57017968ca44e7eec935b2171bea5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): datafusion/physical-expr/src/expressions/cast.rs:562-584 | datafusion/physical-expr/src/expressions/try_cast.rs:302-324 \u2014 before extracting anything, compare \u0060datafusion/physical-expr/src/expressions/cast.rs\u0060 and \u0060datafusion/physical-expr/src/expressions/try_cast.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/cast.rs"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd9ff3f82c17c687ac0776ffa8d9553b3ee5c76eb73d1c5d6f1ce7b7c6fba123"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): datafusion/physical-plan/src/topk/mod.rs:1468-1490 | datafusion/physical-plan/src/topk/mod.rs:1876-1898 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1468}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e7f945a42e582be3a118e6cba1a51e15dc48d713b44dee8a4e8a67f7fac8037"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): datafusion/sql/src/unparser/dialect.rs:859-881 | datafusion/sql/src/unparser/dialect.rs:1052-1074 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/dialect.rs"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dcc6afea68c582a358a76b97839ae951b14cd72f736e2e10f692a13a0015698"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201322 lines \u00D7 2): datafusion/common/src/config.rs:2254-2275 | datafusion/common/src/config.rs:2292-2308 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/config.rs"},"region":{"startLine":2254}}}],"partialFingerprints":{"codehealthFindingId/v1":"17a2fab3ca5f67968ea4c0141036174a1c5dc59bdc0003fe853feb169e63b2b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): datafusion/ffi/src/physical_expr/mod.rs:431-452 | datafusion/ffi/src/physical_expr/mod.rs:475-496 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/physical_expr/mod.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0c5466d5c2bca360d813d8043cc7ffcb97231ee513357d75235eb56e141f003"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201322 lines \u00D7 2): datafusion/physical-expr/src/window/aggregate.rs:276-297 | datafusion/physical-expr/src/window/sliding_aggregate.rs:208-225 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/window/aggregate.rs"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"be85ddf9317908dae3ff1d808459c4ea5e073482d2c75db9bbd051e8d77d767a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3): datafusion/physical-plan/src/topk/mod.rs:1335-1355 | datafusion/physical-plan/src/topk/mod.rs:1651-1671 | datafusion/physical-plan/src/topk/mod.rs:2146-2166 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1335}}}],"partialFingerprints":{"codehealthFindingId/v1":"b166e9f36b68efa2d2d7520049e8e4a12991595eee6109d74235de0627500795"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3): datafusion/physical-plan/src/topk/mod.rs:1376-1396 | datafusion/physical-plan/src/topk/mod.rs:1694-1714 | datafusion/physical-plan/src/topk/mod.rs:2198-2218 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1376}}}],"partialFingerprints":{"codehealthFindingId/v1":"9455d9bac03b75734419749e5e2076bc19e004f44ccab8decf74d40ba7cf7143"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201321 lines \u00D7 2): datafusion/catalog/src/memory/table.rs:654-674 | datafusion/catalog/src/memory/table.rs:876-895 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/memory/table.rs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cef598754bf8373afdaa680ca19fbbcaf1faf2268d7621ae90aa0b0f3f4c66b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): datafusion/functions/src/math/ceil.rs:111-131 | datafusion/functions/src/math/floor.rs:157-177 \u2014 before extracting anything, compare \u0060datafusion/functions/src/math/ceil.rs\u0060 and \u0060datafusion/functions/src/math/floor.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/ceil.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b07c5955476748e755bd2cb49adaa31638551981bf80b25837394dd4dfb70cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): datafusion/functions/src/regex/regexpreplace.rs:379-399 | datafusion/functions/src/regex/regexpreplace.rs:446-466 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpreplace.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc8e3ef67ab1795f959709061362950411773568fd4f2ae60cb09ef8099dafac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): datafusion/functions-aggregate/src/percentile_cont.rs:318-338 | datafusion/functions-aggregate/src/percentile_cont.rs:351-371 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/percentile_cont.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"9065ff3f09a2dfe52dfde8c660c64f767a092b25e180a7a48afdfc299f54c0b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): datafusion/physical-expr-common/src/binary_map.rs:592-612 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes.rs:366-386 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/binary_map.rs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9083891448fb1f81645496f1db0719f1c929fcb57b0d3c77ad1f17c6bae45bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201321 lines \u00D7 2): datafusion/physical-plan/src/joins/hash_join/exec.rs:1366-1386 | datafusion/physical-plan/src/joins/nested_loop_join.rs:430-449 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/nested_loop_join.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1366}}}],"partialFingerprints":{"codehealthFindingId/v1":"d51aaebef6eb2fc492551d442c4d58a2d336cbe2a9659a25d1750d49a0cd5984"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): datafusion/physical-plan/src/joins/hash_join/exec.rs:1458-1478 | datafusion/physical-plan/src/joins/nested_loop_join.rs:526-546 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/nested_loop_join.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1458}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a3cbf3c9ec9a7cadbfdf001b66c966b0402e387ab228a3b33bd28c97912cfb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): datafusion/common/src/scalar/mod.rs:2837-2856 | datafusion/common/src/scalar/mod.rs:2880-2899 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":2837}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d33bacceafb7f7102f24b326d53920c9119c69c962378e6d4acfe3fc14e10bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): datafusion/datasource-arrow/src/file_format.rs:283-301 | datafusion/datasource-avro/src/file_format.rs:234-253 \u2014 before extracting anything, compare \u0060datafusion/datasource-arrow/src/file_format.rs\u0060 and \u0060datafusion/datasource-avro/src/file_format.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-arrow/src/file_format.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"161638d36d58596d43fd6122cb7f94458712859998788baba6c06973c255d9d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): datafusion/datasource-json/src/file_format.rs:281-300 | datafusion/datasource-json/src/file_format.rs:304-322 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-json/src/file_format.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f2974f4401bd3eff699a8c535d2d40f0a45727296e3be04de9ea38fe7c33c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): datafusion/functions/src/binaries.rs:230-248 | datafusion/functions/src/strings.rs:281-300 \u2014 before extracting anything, compare \u0060datafusion/functions/src/binaries.rs\u0060 and \u0060datafusion/functions/src/strings.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/binaries.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cda281b87a7aba55363563be3028e5f7bc26f177b3c5f42c14eba935f07aa43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201320 lines \u00D7 2): datafusion/functions/src/datetime/to_timestamp.rs:432-443 | datafusion/functions/src/datetime/to_timestamp.rs:541-560 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/to_timestamp.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"c943284d840efd4012386133bc7df07a8a5266fe2b2cdf2d5a872e1ab079d969"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201320 lines \u00D7 2): datafusion/functions/src/math/round.rs:659-677 | datafusion/functions/src/math/round.rs:697-716 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ba1262a70d81ea36c9f0a36f9dd80c80a9be147c2c622fe568e781c5e215c8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): datafusion/functions/src/string/ends_with.rs:108-127 | datafusion/functions/src/string/starts_with.rs:104-123 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ends_with.rs\u0060 and \u0060datafusion/functions/src/string/starts_with.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/ends_with.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e3e605de954400329364b3567bbddafa4941cf079e4ae0a073056ef2956d3d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:125-144 | datafusion/functions/src/unicode/rpad.rs:125-144 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbae527892ad07b0995b23dcb53c8dd26500fc1f9418402a7fbdc0fe68a116ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:466-485 | datafusion/functions/src/unicode/rpad.rs:467-486 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bf441ad5e8b5762e6650f391a3927c639b088b68d4b56d5c420e3aa9b91a08b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): datafusion/physical-plan/src/spill/mod.rs:543-562 | datafusion/physical-plan/src/spill/mod.rs:568-587 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/spill/mod.rs"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f472fae528ff4ed3c87f6d38bf98a0c990872ff8aa76f3ea5095de815ced9aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201319 lines \u00D7 3): datafusion/functions-nested/src/array_avg.rs:139-157 | datafusion/functions-nested/src/array_product.rs:143-157 | datafusion/functions-nested/src/array_sum.rs:139-157 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/array_avg.rs\u0060 and \u0060datafusion/functions-nested/src/array_product.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 53 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_avg.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d1648e2ab990b1186ab0e82da3bf84e20c054717ab64c6d76fac836238bb0e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): datafusion/expr-common/src/casts.rs:324-342 | datafusion/expr-common/src/casts.rs:344-362 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/casts.rs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"d07697e5a6c988de95131d093b9408010cbbc6d21a00abf1697b96305416b296"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): datafusion/ffi/src/config/mod.rs:48-66 | datafusion/ffi/src/config/mod.rs:136-154 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/config/mod.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f60f5c3e15015db63e4bb54b35ea24383fcfe6fe166df836c0716313c46deae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201319 lines \u00D7 2): datafusion/functions-nested/src/array_has.rs:679-697 | datafusion/functions-nested/src/array_has.rs:731-747 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_has.rs"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc5732f1996646991f349dde426373f42def7cd3483f6e131eb081e4d371a544"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): datafusion/functions-nested/src/cosine_distance.rs:121-139 | datafusion/functions-nested/src/inner_product.rs:123-141 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/cosine_distance.rs\u0060 and \u0060datafusion/functions-nested/src/inner_product.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 86 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/cosine_distance.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb1169665d04da8d500f58e2ddabb5d35e630054fc1e0de8262e22a24403671"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): datafusion/functions-nested/src/utils.rs:132-150 | datafusion/spark/src/function/functions_nested_utils.rs:34-52 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/utils.rs\u0060 and \u0060datafusion/spark/src/function/functions_nested_utils.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/utils.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"2397a952b7f3f4511dd22a705a3c3496d3b42b5b665ac2430430c3463bac8342"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18\u201319 lines \u00D7 2): datafusion/physical-plan/src/windows/proto.rs:151-168 | datafusion/proto/src/physical_plan/from_proto.rs:171-189 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/proto.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4ebbc9cfeb324279c197a4fc68b3acd4e283c863f02777e679ef87266195e3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): datafusion/spark/src/function/string/format_string.rs:1146-1164 | datafusion/spark/src/function/string/format_string.rs:1172-1190 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1146}}}],"partialFingerprints":{"codehealthFindingId/v1":"081e6a169484c0c23d558c30d9a479f1d7cbb095291077b3c1eddc921de83d2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): datafusion/sql/src/select.rs:711-729 | datafusion/sql/src/select.rs:870-888 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"78f7037525443623822318eb83dbf1e328c4eb8d3fe831b9cbffd263d0cae99c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): datafusion/sqllogictest/src/engines/datafusion_engine/runner.rs:158-176 | datafusion/sqllogictest/src/engines/datafusion_substrait_roundtrip_engine/runner.rs:104-122 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/engines/datafusion_engine/runner.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1cdb0e853f665d78f3aa52b2186b394f939c354c547e0e99a0254821242ee0a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): datafusion/datasource-csv/src/source.rs:540-557 | datafusion/datasource-json/src/source.rs:595-612 | datafusion/datasource-parquet/src/writer.rs:71-88 \u2014 before extracting anything, compare \u0060datafusion/datasource-csv/src/source.rs\u0060 and \u0060datafusion/datasource-json/src/source.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/source.rs"},"region":{"startLine":540}}}],"partialFingerprints":{"codehealthFindingId/v1":"5be2b80e3571fadb2bc8b637be0f63793ff8533a00483a5230483834719ba737"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): datafusion/common/src/hash_utils/build_hasher.rs:227-244 | datafusion/common/src/hash_utils/build_hasher.rs:272-289 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils/build_hasher.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"83d44d8dee9ac92d46d27d9fdbd73f409a31066437ca814926ac169630e0bbcc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201318 lines \u00D7 2): datafusion/common/src/scalar/mod.rs:5151-5164 | datafusion/common/src/scalar/mod.rs:5240-5257 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":5151}}}],"partialFingerprints":{"codehealthFindingId/v1":"55dd3a758dc9281fccdc97ed55061319d6241a98fddee9ccc41fbe4e1cd7ee65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201318 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:422-436 | datafusion/functions/src/regex/regexpcount.rs:504-521 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"575a551a20e383106ba30feaa0bbf1a565a1edb7ef7cc401ade6e00e14c25dcb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): datafusion/functions-aggregate/src/min_max/min_max_bytes.rs:517-534 | datafusion/functions-aggregate/src/min_max/min_max_struct.rs:311-328 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max/min_max_bytes.rs"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"6215efb69ede07023fb1ea5f1b2fa42b06107c5b4bfbc2a3d5c49dd97d193126"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201318 lines \u00D7 2): datafusion/functions-aggregate/src/planner.rs:74-91 | datafusion/functions-window/src/planner.rs:82-96 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/planner.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba1197a4a35e6bdb3bedbea8b82732618b8f223a0339f717241606d93410f6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): datafusion/functions-nested/src/cosine_distance.rs:101-118 | datafusion/functions-nested/src/inner_product.rs:103-120 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/cosine_distance.rs\u0060 and \u0060datafusion/functions-nested/src/inner_product.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 86 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/cosine_distance.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a35e9c02198b43879d01d08b7254153a96dc8075ce6f6bcf2f80c445f1e3f86"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): datafusion/physical-expr/src/intervals/cp_solver.rs:659-676 | datafusion/physical-expr/src/statistics/stats_solver.rs:182-199 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/intervals/cp_solver.rs"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eeab8f8fc6c42e9558e7b0ad9b02aae3fc278dda03c53211460589339cfe66c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): datafusion/physical-plan/src/aggregates/mod.rs:2020-2037 | datafusion/physical-plan/src/aggregates/mod.rs:2077-2094 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2020}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b66ab26bbcdd2f1d58bed154ad758bf8362bb30257e2182293b57847b41ce05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201318 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_single_stream.rs:263-275 | datafusion/physical-plan/src/aggregates/single_stream.rs:293-310 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_single_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/single_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 101 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe2d414fad63a79e4acf12ea0bba3db33ea6e5dd65403ab28112507a0570980"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): datafusion/datasource-arrow/src/source.rs:362-378 | datafusion/datasource/src/file.rs:182-197 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-arrow/src/source.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb4e1dc47856dc72d9b53e7ec06f679c997ba196c604eb7cb96f59a7e0a947fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): datafusion/functions/src/math/gcd.rs:95-111 | datafusion/functions/src/math/lcm.rs:91-107 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/gcd.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dc785782f1f94138dfbdf680ffbb7656c056cab529b855b8d79926150dfee58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:318-334 | datafusion/functions/src/regex/regexpcount.rs:393-409 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f19f1a4ff5bb3107294d0e2258f3d86d947e7719bf96895bda222600edd36f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:376-392 | datafusion/functions/src/unicode/rpad.rs:375-391 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7729003f3907bb51cd47ca820e4ac1387c241e39ed38bc4330025e39a02e20d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): datafusion/functions-aggregate/src/stddev.rs:100-116 | datafusion/functions-aggregate/src/stddev.rs:208-224 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/stddev.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5fed29d4a3ec05ec60c8da70fcc3534ccd408d2ef734b7ff634b05bf41491e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): datafusion/physical-expr/src/higher_order_function.rs:390-406 | datafusion/physical-expr/src/scalar_function.rs:256-272 \u2014 before extracting anything, compare \u0060datafusion/physical-expr/src/higher_order_function.rs\u0060 and \u0060datafusion/physical-expr/src/scalar_function.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 42 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/higher_order_function.rs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"d322edb95cb9a0c8f882d15bd07a3f5fedebd3a1c6eb1351801c451d96a7e772"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201317 lines \u00D7 2): datafusion/sql/src/statement.rs:611-627 | datafusion/sql/src/statement.rs:635-650 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":611}}}],"partialFingerprints":{"codehealthFindingId/v1":"90fd6ef96aef4be8415a12029b9ae9264dc334a8d93b105c3d098f5de53d2ebf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): datafusion/physical-plan/src/sorts/partitioned_topk.rs:513-528 | datafusion/physical-plan/src/sorts/partitioned_topk.rs:531-546 | datafusion/physical-plan/src/sorts/partitioned_topk.rs:549-564 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/partitioned_topk.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"a853457098a90dde4de5c5c3f4307295d892abdf8e19960a6831f5431dd7c51e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 2): datafusion/core/src/execution/context/mod.rs:1203-1218 | datafusion/core/src/execution/context/mod.rs:1234-1247 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/context/mod.rs"},"region":{"startLine":1203}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd764e53ea940b9df3a1f919a961aa8373384f863f4d9eff271bc4091caecd24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/expr/src/udaf.rs:1164-1179 | datafusion/expr/src/udaf.rs:1353-1368 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/udaf.rs"},"region":{"startLine":1164}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9611142afd1faa048b929c568d4d7d063a721d9ce5b15aa0b1f988db17254db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/functions/src/binaries.rs:205-220 | datafusion/functions/src/strings.rs:256-271 \u2014 before extracting anything, compare \u0060datafusion/functions/src/binaries.rs\u0060 and \u0060datafusion/functions/src/strings.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/binaries.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fba1e236208ebec46065fac8816c3dc13baa206936b0ffb54cf81cc9d6e1e33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): datafusion/functions/src/core/arrow_cast.rs:161-175 | datafusion/functions/src/core/arrow_try_cast.rs:133-148 \u2014 before extracting anything, compare \u0060datafusion/functions/src/core/arrow_cast.rs\u0060 and \u0060datafusion/functions/src/core/arrow_try_cast.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/arrow_cast.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4d253537f3280e7b10486a871e26f9b1eda42f185bf7dd4257afe8fe2497b49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:456-471 | datafusion/functions/src/regex/regexpcount.rs:492-507 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b17c10fe2332722ee5382d3744a7d22888e8ed2dc92e6256284744034897a3d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:391-406 | datafusion/functions/src/unicode/lpad.rs:463-478 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bfdaba722dd51eb86de881df46da4d767ce18252e1f2833ea1a04f9a117480f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:449-464 | datafusion/functions/src/unicode/rpad.rs:450-465 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"f00f2bad7d996512bec997482caeb581cb7d31a7567440077bb67354b31934d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/functions/src/unicode/rpad.rs:390-405 | datafusion/functions/src/unicode/rpad.rs:464-479 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/rpad.rs"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"9061a90e57aa7e3af2c39811f701f67cf6973f7d754ab50af7af4f1eba5b2e5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/functions-aggregate-common/src/aggregate/count_distinct/bytes.rs:80-95 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/bytes.rs:143-158 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/count_distinct/bytes.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"172db685941ef6a8a73a1db35ee0f487422c6e9cb21ba915942a5d3ce1507033"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/functions-nested/src/reverse.rs:173-188 | datafusion/functions-nested/src/reverse.rs:240-255 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/reverse.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"92cf82249cd4e713e9c83bbb442e9fa79b872ba0b77b5ccc1511d88628a88d37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/optimizer/src/analyzer/function_rewrite.rs:51-66 | datafusion/optimizer/src/analyzer/type_coercion.rs:122-137 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/function_rewrite.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d4203e1ee0209c2f57b46635629b7b8d68998524d952396064a463417cc27de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201316 lines \u00D7 2): datafusion/optimizer/src/decorrelate.rs:697-712 | datafusion/optimizer/src/decorrelate.rs:741-754 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate.rs"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"46a9ea5b1948651cb4e6d10c357acfc6542faace10d86a3a98de87c2c3523947"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_single_stream.rs:464-479 | datafusion/physical-plan/src/aggregates/single_stream.rs:496-511 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_single_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/single_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 101 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"264abb45b4ab70ee42cf518e463c412683810edb07aed09b03ff93b76b09e90b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/proto/src/logical_plan/mod.rs:708-723 | datafusion/proto/src/logical_plan/mod.rs:1335-1350 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/mod.rs"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"49d7eeccec6985c353410dc494677c8578daf343ca00e30da813ae3629236ffa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201315 lines \u00D7 4): datafusion/sql/src/unparser/expr.rs:1626-1640 | datafusion/sql/src/unparser/expr.rs:1642-1656 | datafusion/sql/src/unparser/expr.rs:1658-1672 | datafusion/sql/src/unparser/expr.rs:1673-1681 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":1626}}}],"partialFingerprints":{"codehealthFindingId/v1":"d87ff2229a60b41bcbe95f2a1bff2b10865863e5ad58419b201e8ea24efd6a3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): datafusion/catalog/src/async.rs:301-314 | datafusion/catalog/src/async.rs:393-407 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/async.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"b346807b62c16f3bd5ec85e0982f3a0c424b0f3e669963cc204271a4e2bc4bc1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/core/src/physical_planner.rs:1399-1413 | datafusion/core/src/physical_planner.rs:1414-1428 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":1399}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a1ed4f793396337d21338edefd865584994d64fcc03eb244366bd6feda44511"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/expr/src/logical_plan/builder.rs:2097-2111 | datafusion/expr/src/logical_plan/builder.rs:2119-2133 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":2097}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8a50bf7868bdbb0838bf38cd2adfee00c92e191752e6c10a1377d7c798aa0c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:328-342 | datafusion/ffi/src/proto/physical_extension_codec.rs:314-328 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff041bcd930cbdcf30ee223627b6e5b506d966194132ed58df69dbed4ba219ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): datafusion/functions/src/datetime/date_part.rs:519-533 | datafusion/functions/src/datetime/date_part.rs:561-574 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_part.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc90297278a1131d9e65437b693f1b235aec992846a2f44c767724065cab7495"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/functions/src/math/ceil.rs:138-152 | datafusion/functions/src/math/floor.rs:184-198 \u2014 before extracting anything, compare \u0060datafusion/functions/src/math/ceil.rs\u0060 and \u0060datafusion/functions/src/math/floor.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/ceil.rs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ad7ba48b679ba0d4a7193b2dd6f01ecb6847f5b5e7d44f81a4f84871f8cf236"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/functions-aggregate/src/first_last.rs:1027-1041 | datafusion/functions-aggregate/src/first_last.rs:1422-1436 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":1027}}}],"partialFingerprints":{"codehealthFindingId/v1":"51858f86db88a559e36eee0f86d47245e5fb48a28d6e8548ca8740430d0df1d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/functions-aggregate/src/min_max.rs:860-874 | datafusion/functions-aggregate/src/min_max.rs:988-1002 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max.rs"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a39b400a182a78939eb715498799941effbbaa5102d98941629b4d4f80b4d8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/functions-aggregate/src/nth_value.rs:248-262 | datafusion/functions-aggregate/src/nth_value.rs:423-437 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/nth_value.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"efe9a616d7b3666fc4363564ba155df5fc3937798a1142a5007fee34d7f5309d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/functions-nested/src/remove.rs:479-493 | datafusion/functions-nested/src/replace.rs:461-475 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/remove.rs"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"c52ae70b1b77e1ff7d4968252c0849ffd8f46889548542d2ce49208aa4348859"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/functions-nested/src/replace.rs:95-109 | datafusion/functions-nested/src/replace.rs:321-335 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/replace.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"aad394f48f2a304c97502bce8177991f5d21e621c859ee860abe32dba4586a55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/physical-expr/src/expressions/case.rs:883-897 | datafusion/physical-expr/src/expressions/case.rs:970-984 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/case.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"1656f517251423eac00930cb8f93ff93fea2642b70746a74a9e1ba2d948cecde"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs:218-232 | datafusion/physical-plan/src/aggregates/aggregate_hash_table/common_ordered.rs:263-277 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/aggregate_hash_table/common_ordered.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"350e2175bd99cc463b332112d10e1489665e87ef9b05a59c9067fc00c960e565"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/multi_group_by/boolean.rs:117-131 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/primitive.rs:211-225 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/boolean.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca0e0212c3264f2df91535fb5f8963d84d7d99df7fab49fc65e3bc0626a38800"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/physical-plan/src/coop.rs:383-397 | datafusion/physical-plan/src/projection.rs:609-623 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/coop.rs"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbad743af32955e379776aa7b14add379320f0b0e9dcdd98e51c11fa528c8b1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/physical-plan/src/joins/hash_join/exec.rs:1925-1939 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:631-645 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/symmetric_hash_join.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1925}}}],"partialFingerprints":{"codehealthFindingId/v1":"678feb9af7d20278d4f5fcdc656596b4613b504b061c227c82ce4f6647dccc99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/physical-plan/src/sorts/partial_sort.rs:332-346 | datafusion/physical-plan/src/sorts/sort.rs:1317-1331 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/partial_sort.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eb11a5c9ba77257e7aeef1d8dea7eea73472c4ab4b2b3aa890a7c58f924009c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201315 lines \u00D7 2): datafusion/physical-plan/src/spill/in_progress_spill_file.rs:73-87 | datafusion/physical-plan/src/spill/in_progress_spill_file.rs:116-126 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/spill/in_progress_spill_file.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"4270f65dbb1fafe3b5194ba33b3b7b8afe63c7d8a51f1ad34c1b1f1d791f6bed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs:330-344 | datafusion/physical-plan/src/windows/window_agg_exec.rs:151-165 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs\u0060 and \u0060datafusion/physical-plan/src/windows/window_agg_exec.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c873296f238b2f7e2570f8b185bd364c261794de6dae63483772ea86a0fb81d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): datafusion/functions/src/datetime/to_timestamp.rs:552-565 | datafusion/functions/src/datetime/to_timestamp.rs:619-632 | datafusion/functions/src/datetime/to_timestamp.rs:688-701 | datafusion/functions/src/datetime/to_timestamp.rs:757-770 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/to_timestamp.rs"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7428ecd992ad72e8cd6691984296051d213aa16ede9cbfd4a6a0ce7371ee8b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): datafusion/functions-nested/src/array_avg.rs:98-111 | datafusion/functions-nested/src/array_normalize.rs:104-117 | datafusion/functions-nested/src/array_product.rs:102-115 | datafusion/functions-nested/src/array_sum.rs:98-111 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/array_avg.rs\u0060 and \u0060datafusion/functions-nested/src/array_normalize.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_avg.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"a67cee44991c8a21d2b47942b5c29bb4e68801d57cd39262f887efc68c5fd0b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): datafusion/datasource-arrow/src/file_format.rs:326-339 | datafusion/datasource-avro/src/file_format.rs:291-304 | datafusion/datasource-parquet/src/sink.rs:388-401 \u2014 before extracting anything, compare \u0060datafusion/datasource-arrow/src/file_format.rs\u0060 and \u0060datafusion/datasource-avro/src/file_format.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-arrow/src/file_format.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2467737a52887e6bb817c86253f18a0cfefa9400e0f4481f0927be2f3866e9f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): datafusion/physical-plan/src/joins/asof_join.rs:613-626 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:730-743 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:690-703 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/asof_join.rs\u0060 and \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"f72445440d9e9fd177da6dad81df6a5e8a747a4cbe388d02a01299e5d3a04196"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 3): datafusion/catalog/src/information_schema.rs:396-409 | datafusion/catalog/src/information_schema.rs:411-424 | datafusion/catalog/src/information_schema.rs:425-436 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"22234ec950f294db4b85e2bc621f4ec880a4c845bc6b462bfb68a34622097a7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/expr-common/src/operator.rs:182-195 | datafusion/expr-common/src/operator.rs:319-332 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/operator.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee4aac27fde8b0e2b6658bd8fe25086a10b661e30bece0caf820768cd8e2a354"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions/src/binaries.rs:38-51 | datafusion/functions/src/strings.rs:75-88 \u2014 before extracting anything, compare \u0060datafusion/functions/src/binaries.rs\u0060 and \u0060datafusion/functions/src/strings.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/binaries.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4c07b72c66bace30dd5f5156db589e8fab686f41b26e34abffa28612e1739e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions/src/encoding/inner.rs:90-103 | datafusion/functions/src/encoding/inner.rs:163-176 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/encoding/inner.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc56cb6655ab7330c11638b5232afae707084e2dd220f987cbfbc7a2203a06c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:329-342 | datafusion/functions/src/regex/regexpcount.rs:374-388 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cf0e53d0516dd8c57a9c0147e9779d5c343cfd365f8bcbed593bff0380f2961"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:404-417 | datafusion/functions/src/regex/regexpcount.rs:477-490 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22873c94a6784da83f762bf319668f0acaa1b53e0bac1da96bd402fd2efafb3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:440-454 | datafusion/functions/src/regex/regexpcount.rs:527-540 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb176debf469ecc1acaad4ecb311f125a18fe2d8fb41fa74d542e08a0c749945"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions/src/unicode/substr.rs:77-90 | datafusion/spark/src/function/string/substring.rs:61-74 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/substr.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"efe721a35caae5aa49344e60f715fc35d4872082d3876ce9ebf2ced8c473eaed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): datafusion/functions-aggregate/src/array_agg.rs:963-976 | datafusion/functions-aggregate/src/array_agg.rs:1156-1168 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":963}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b00d95b0e2ed10a7d863fb17c0808155ff30dc7f8642ab8827c977b56dbb082"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions-nested/src/position.rs:252-265 | datafusion/functions-nested/src/position.rs:548-561 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/position.rs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dffc04cc9b4c5249e49a49c87a9f4b26751771591d09132bf99770b3d058969"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/physical-expr/src/expressions/case.rs:909-922 | datafusion/physical-expr/src/expressions/case.rs:995-1008 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/case.rs"},"region":{"startLine":909}}}],"partialFingerprints":{"codehealthFindingId/v1":"85c1da766f9c32dd2b8770c5931a9a67fa515149909424e284649ca06b3c3ee4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/physical-expr-common/src/binary_map.rs:496-509 | datafusion/physical-expr-common/src/binary_map.rs:537-550 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/binary_map.rs"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcded0e0be40da554987c6acaafd24c0e6e62499178b31a31758f4287b75844e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_final_stream.rs:273-286 | datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs:269-282 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_final_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_final_stream.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4bf2a23a218b55e7da47b93809f009dd1f0497494b8b6238848d5d4054d941a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs:366-379 | datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs:593-606 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"6052bf57e62b3d22dd1863b5e8717f69ddc6d626c117649ec8dca88428d363a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/proto/src/logical_plan/from_proto.rs:361-374 | datafusion/proto/src/logical_plan/from_proto.rs:395-408 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29f6913d8dbc6488cc1b8f2fdfc69dc9a8e7450447b154054affdc292d632a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/spark/src/function/datetime/from_utc_timestamp.rs:59-72 | datafusion/spark/src/function/datetime/to_utc_timestamp.rs:61-74 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/from_utc_timestamp.rs\u0060 and \u0060datafusion/spark/src/function/datetime/to_utc_timestamp.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 70 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/from_utc_timestamp.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"768cece2750b56cf2d50068c651986e84a58d979741d7623d350b93f2064cb61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/sql/src/expr/function.rs:1044-1057 | datafusion/sql/src/expr/function.rs:1100-1113 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5b91200499c8f67e793cf7d3d9a5853326c9e6d08d8cda2635c34b3c381e1e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/sqllogictest/src/engines/datafusion_engine/runner.rs:88-101 | datafusion/sqllogictest/src/engines/datafusion_substrait_roundtrip_engine/runner.rs:70-83 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/engines/datafusion_engine/runner.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac7d2a5028d323dc94f707f5e26e464a7bcb18458defff486ca529dbb4b249e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion-cli/src/object_storage/instrumented.rs:333-346 | datafusion-cli/src/object_storage/instrumented.rs:356-369 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/object_storage/instrumented.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f1b221e68c014a7eab8aedd1d6025fbc8b043622c22acbe6b4a8217ae61485d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): datafusion/functions-nested/src/cosine_distance.rs:113-125 | datafusion/functions-nested/src/inner_product.rs:115-127 | datafusion/functions-nested/src/utils.rs:371-383 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/cosine_distance.rs\u0060 and \u0060datafusion/functions-nested/src/inner_product.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 86 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/cosine_distance.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a55da4d756ab82b56e3e04d2c2d5b6b158e71a141735efaa2d484f00fbb3237"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes.rs:149-161 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes_view.rs:155-167 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/fixed_size_binary.rs:174-186 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"db1e2524ced56ceda876fd972331d8c391b0b2c92e967d72aeac04817d42e9f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 3): datafusion/physical-plan/src/aggregates/ordered_single_stream.rs:674-686 | datafusion/physical-plan/src/aggregates/partial_reduce_stream.rs:515-527 | datafusion/physical-plan/src/aggregates/single_stream.rs:701-711 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_single_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/single_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 101 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aa15a6de7853e79c38d93588acaf4ec87401a047d97cc94035938dd588f9b85"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): datafusion/sql/src/parser.rs:839-851 | datafusion/sql/src/parser.rs:1316-1328 | datafusion/sql/src/parser.rs:1403-1415 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"914e2c1a040ac646ef8b279b43195dd49a69162321a9abf282a8cd2014b47c93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/datasource-csv/src/source.rs:505-517 | datafusion/datasource-json/src/source.rs:564-576 \u2014 before extracting anything, compare \u0060datafusion/datasource-csv/src/source.rs\u0060 and \u0060datafusion/datasource-json/src/source.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/source.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7091bba437d536399f4baffd171b6069b4ecc1ad85263c1fb014117978e0e39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/expr/src/logical_plan/builder.rs:218-230 | datafusion/expr/src/logical_plan/builder.rs:253-265 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"11319d0c562b04cf87b368d84c3b9ada778f693b55c0d2c48ac2ac5b64c8bf94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): datafusion/functions/src/core/overlay.rs:274-285 | datafusion/functions/src/unicode/translate.rs:205-217 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/overlay.rs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6c98db21eb357fdb6960b5ded2c9c413c55ceafe4bd340709c97e14da5e446f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): datafusion/functions/src/datetime/make_date.rs:132-142 | datafusion/functions/src/datetime/make_time.rs:135-147 \u2014 before extracting anything, compare \u0060datafusion/functions/src/datetime/make_date.rs\u0060 and \u0060datafusion/functions/src/datetime/make_time.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/make_date.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c229e8538324f270eb651539a04ceb4dec716adadc1958c2b02965ed06f5e5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): datafusion/functions/src/math/abs.rs:177-188 | datafusion/functions/src/math/monotonicity.rs:345-357 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/abs.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"190c00d8a57544483b2aff5b0d742c0e164dbf4a1edfcb2baf850fd5dfe5a785"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions/src/regex/regexpreplace.rs:653-665 | datafusion/functions/src/utils.rs:133-145 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpreplace.rs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b9c6df3e82be8f1e49bfee81251df61267b98b7b40c147399bff23ac27f2654"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions/src/string/ends_with.rs:94-106 | datafusion/functions/src/string/starts_with.rs:90-102 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ends_with.rs\u0060 and \u0060datafusion/functions/src/string/starts_with.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/ends_with.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"28676c60fca2df8a91d761e67d7fa7f4d57418e7989c6f6314295e250a8e4402"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions/src/string/ltrim.rs:102-114 | datafusion/functions/src/string/rtrim.rs:102-114 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ltrim.rs\u0060 and \u0060datafusion/functions/src/string/rtrim.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/ltrim.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa7f2b702ffc47b0ba78b55c63dd2831e399a847ae3d850b4371530aa601d586"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:111-123 | datafusion/functions/src/unicode/rpad.rs:111-123 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"9938cbf679ad396c0dd27f084db24146b41337363965915664e7f99174ef26c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): datafusion/functions-aggregate/src/first_last.rs:1074-1086 | datafusion/functions-aggregate/src/first_last.rs:1468-1479 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":1074}}}],"partialFingerprints":{"codehealthFindingId/v1":"c94353b6c0f453eaaf8369a0fa134c532c9b24328ff4217c22271320d392a52d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions-aggregate/src/nth_value.rs:296-308 | datafusion/functions-aggregate/src/nth_value.rs:507-519 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/nth_value.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ec5a9191a52c816e5cc4b9dcd6a43bea9aff2f3a049ef31817b19410635ca21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions-nested/src/position.rs:268-280 | datafusion/functions-nested/src/position.rs:567-579 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/position.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6d48333eee57e1e3e34587701b2cbe58f87fe69b7841721260153bf7e9cd2d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions-nested/src/range.rs:380-392 | datafusion/functions-nested/src/range.rs:461-473 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/range.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab853f2f3edc67875e46138ca2ba979e795abdddfeaad7deec4b1766e823546"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/physical-expr/src/expressions/cast.rs:231-244 | datafusion/physical-expr/src/expressions/try_cast.rs:178-190 \u2014 before extracting anything, compare \u0060datafusion/physical-expr/src/expressions/cast.rs\u0060 and \u0060datafusion/physical-expr/src/expressions/try_cast.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/cast.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9a7db39dd4ff26624d3e32bbe3d28a448c448f5f667645eaea164e88aa9fa1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/physical-expr/src/window/sliding_aggregate.rs:195-207 | datafusion/physical-expr/src/window/sliding_aggregate.rs:229-241 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/window/sliding_aggregate.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"1394044930aac640822113f6df58ba182d5e3ffdd8011955fec129bb3783f0d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes.rs:127-138 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/fixed_size_binary.rs:151-163 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"caade5262e381c34149da4b2b3c5a75a0fc7c52f11c1abf5a2eaac32b91bfbce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/multi_group_by/dictionary.rs:432-444 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/dictionary.rs:453-464 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/dictionary.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"f67f54a381a031cead82e3d94f9a476d118f255d95924801284517c8e55d26a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_final_stream.rs:426-436 | datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs:390-402 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_final_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_final_stream.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfa3819c3f63b64c2ce8068083303b24615bc48343e6164f3696d5196ed65f49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_single_stream.rs:406-417 | datafusion/physical-plan/src/aggregates/single_stream.rs:437-449 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_single_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/single_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 101 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf4b562c45ab780596c5af6267d4f16610462c9ef8497801bef196fd6ff28751"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): datafusion/physical-plan/src/aggregates/topk/hash_table.rs:401-413 | datafusion/physical-plan/src/aggregates/topk/hash_table.rs:446-457 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/topk/hash_table.rs"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a60cc963a7d78e41fb4128b25734e0f04380b77365ae18b06b0b03611ea408e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): datafusion/physical-plan/src/display.rs:290-301 | datafusion/physical-plan/src/display.rs:486-498 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"4245fd14a1dd8d33057e45119564986f32afe88ca8673050b4ea0b0fafc126d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/physical-plan/src/display.rs:579-591 | datafusion/physical-plan/src/display.rs:685-697 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":579}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7bf006f4d96958ae1d2eb74da72b412b604df4e032ee8a51e92c88b308fdd83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/physical-plan/src/joins/hash_join/exec.rs:1512-1524 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:440-452 \u2014 \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 33 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1512}}}],"partialFingerprints":{"codehealthFindingId/v1":"9416ff853b14df41cbfd0e42e51feca93b086475bd22d8f6dee1a5fb607d2ef7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/physical-plan/src/joins/symmetric_hash_join.rs:1138-1150 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:1152-1164 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/symmetric_hash_join.rs"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd3f2256631a08686b11bfe6a0cd6831cc98f252342c2baf7849cd5b1a4113a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/physical-plan/src/limit.rs:288-300 | datafusion/physical-plan/src/limit.rs:563-575 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/limit.rs"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"9803b2199dcf25029ec224b28cbe5fa508d139e0e14de5ca011e3b035e274773"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/physical-plan/src/topk/mod.rs:1496-1508 | datafusion/physical-plan/src/topk/mod.rs:1908-1920 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1496}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee894d231c363585d37193aa623ddcec5a9a74b2567280dd3f17afc46eb9a807"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/spark/src/function/datetime/make_dt_interval.rs:174-186 | datafusion/spark/src/function/datetime/make_interval.rs:197-209 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/make_dt_interval.rs\u0060 and \u0060datafusion/spark/src/function/datetime/make_interval.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/make_dt_interval.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"57f328bc22d2e2a625995b676cb771192cb118a99488cd5d0ea9dd84127ab003"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): datafusion/spark/src/function/hash/sha2.rs:131-143 | datafusion/spark/src/function/hash/sha2.rs:145-157 | datafusion/spark/src/function/hash/sha2.rs:158-170 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/hash/sha2.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"49829aecb9699d0b207031963d5262cc9b3bf76a425b444e31c27b7dc6d9a1a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/spark/src/function/string/format_string.rs:1494-1506 | datafusion/spark/src/function/string/format_string.rs:1513-1525 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1494}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f04ad901a3ef6673444ebad80b780c9806166e01dfab80e230b5a360736350"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): datafusion/catalog/src/information_schema.rs:462-473 | datafusion/catalog/src/information_schema.rs:502-513 | datafusion/catalog/src/information_schema.rs:538-549 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c2e972dff03db3ec0c3b9d66b71e54c94866596482b40c9b3d6b8539c81fd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): datafusion/datasource-csv/src/file_format.rs:959-970 | datafusion/datasource-json/src/file_format.rs:602-613 | datafusion/datasource-parquet/src/sink.rs:584-595 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/file_format.rs"},"region":{"startLine":959}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dcdb6c2dff0e81110a80caec705c52d0801cca39199a11e66f779a5c69850d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): datafusion/functions-aggregate-common/src/aggregate/count_distinct/bytes.rs:79-90 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/bytes.rs:142-153 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:104-115 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/count_distinct/bytes.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f461d4490a59c5c737a88d28fc0751c5af85ee3306b0f9f27aa03b6f57cfb79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): datafusion/spark/src/function/bitmap/bitmap_bit_position.rs:45-56 | datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs:45-56 | datafusion/spark/src/function/bitwise/bitwise_not.rs:42-53 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/bitmap/bitmap_bit_position.rs\u0060 and \u0060datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/bitmap/bitmap_bit_position.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c231a4b2e49f2b2434761e87b85c9422c7b3c83f2840a6fcaf8094b6b32eaf6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): datafusion/sql/src/unparser/dialect.rs:480-491 | datafusion/sql/src/unparser/expr.rs:686-697 | datafusion/sql/src/unparser/expr.rs:1828-1839 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/dialect.rs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b62a5369914a9add2be1eb336b797bc57bb1d502edbdd83615d2585f65b9b18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/datasource/src/memory.rs:788-799 | datafusion/proto/src/physical_plan/to_proto.rs:390-401 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/memory.rs"},"region":{"startLine":788}}}],"partialFingerprints":{"codehealthFindingId/v1":"9276858ada3e99b4476407cbd85fb60bb7bd797e1f0f2caff73441da3a553b5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): datafusion/expr/src/logical_plan/display.rs:478-488 | datafusion/expr/src/logical_plan/plan.rs:2252-2263 \u2014 before extracting anything, compare \u0060datafusion/expr/src/logical_plan/display.rs\u0060 and \u0060datafusion/expr/src/logical_plan/plan.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/display.rs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a29db1d3b047bb1ee4d4d292241bada2c041963a43a6ee7433508c3fb62fb7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/expr-common/src/type_coercion/binary.rs:1986-1997 | datafusion/expr-common/src/type_coercion/binary.rs:2033-2044 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":1986}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3c8194249fba05a5e6443cc05ee51f6d1974747e722ef9b815dec9b30d01fbd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/ffi/src/udtf.rs:109-120 | datafusion/ffi/src/udtf.rs:137-148 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/udtf.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"c51372523e7259fc8fe2b870fda3eb2c4b7d4600d0d094bc2d7e02bdcddf49a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/core/arrow_field.rs:135-146 | datafusion/functions/src/core/arrow_metadata.rs:138-149 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/arrow_field.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"627144510869982abbfac12c5e601839dfaac56655295db28fa6fcef8e76852e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/crypto/md5.rs:67-78 | datafusion/functions/src/crypto/sha.rs:122-133 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/crypto/md5.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"517e2f57fde8bbab874e298e181ef4aa8c29df3b5cd074bbbfc25e86893d5c70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/datetime/current_date.rs:112-123 | datafusion/functions/src/datetime/current_time.rs:109-120 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/current_date.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"f51e435cd3af5ec35447b10e15bd60844f3ee81240b6d51beaf56a35a11e9294"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/datetime/make_date.rs:83-94 | datafusion/functions/src/datetime/make_time.rs:84-95 \u2014 before extracting anything, compare \u0060datafusion/functions/src/datetime/make_date.rs\u0060 and \u0060datafusion/functions/src/datetime/make_time.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/make_date.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1272b8212b4a0e7069a100fbc857bc0afcf0717ecf627f6feb6f4beff52f0fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/math/round.rs:455-466 | datafusion/functions/src/math/trunc.rs:270-281 \u2014 before extracting anything, compare \u0060datafusion/functions/src/math/round.rs\u0060 and \u0060datafusion/functions/src/math/trunc.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"c18d396e0f9eaafe637f15e4d5764dc9a4c41fb807d7e8232358afa6add846a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/string/levenshtein.rs:261-272 | datafusion/functions/src/string/levenshtein.rs:281-292 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/levenshtein.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"1637b479979f7db5aaef8b3d65d215d4c593dd8731b7ddb5ad7c2ec564136352"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/unicode/left.rs:59-70 | datafusion/functions/src/unicode/right.rs:59-70 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/left.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"95da5dc4d016138d4a2e702b1ab4a6181881a98b2140f6bc57a0026ee51427de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201312 lines \u00D7 2): datafusion/functions/src/unicode/substr.rs:274-285 | datafusion/functions/src/unicode/substr.rs:325-333 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/substr.rs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7f746a92f48664c89650e175e18114c7cc0ef3f785760f6576f98f043f90f57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/math/common.rs:74-85 | datafusion/functions/src/math/common.rs:113-124 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/common.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"d45d9dbd51d8bbdce9e2577d1cba8b356f85a262f4fb031c5281e3163cf9556c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions-nested/src/cosine_distance.rs:187-198 | datafusion/functions-nested/src/inner_product.rs:193-204 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/cosine_distance.rs\u0060 and \u0060datafusion/functions-nested/src/inner_product.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 86 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/cosine_distance.rs"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"73421143d7e520fe937d458733afe494f2967f933fcdf90a250152669ee11f08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions-nested/src/flatten.rs:142-153 | datafusion/functions-nested/src/flatten.rs:177-188 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/flatten.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5ed1fed6c35ed168cd7baadb58f63694417374838889462a5e837d1d7f86076"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions-nested/src/replace.rs:145-156 | datafusion/functions-nested/src/replace.rs:371-382 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/replace.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"d94a5045745a8cddf837a007a33b66df621530512099ce03f62b81320a70eda9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/physical-expr/src/window/window_expr.rs:508-519 | datafusion/physical-expr/src/window/window_expr.rs:564-575 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/window/window_expr.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"372629801f297f58a412787df02f41cba4901628f4aa20bb4b43e2802d0f43cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs:369-380 | datafusion/physical-plan/src/aggregates/group_values/row.rs:140-149 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"8138849d43770134ff207efb714f9443f710791ff1ae1d8464a2dcc0afd6e01f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_single_stream.rs:278-289 | datafusion/physical-plan/src/aggregates/single_stream.rs:322-333 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_single_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/single_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 101 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea42204a776056fe769ead8a380a8a208e7e4a8cfad3456c7f81651b26179e38"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): datafusion/physical-plan/src/coalesce_partitions.rs:88-99 | datafusion/physical-plan/src/sorts/sort_preserving_merge.rs:166-176 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/coalesce_partitions.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb11ee7af47fa864d0c7e2dc6ff1af9e8af664ec824c38587f4a181ab7585111"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201312 lines \u00D7 2): datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs:236-244 | datafusion/physical-plan/src/joins/piecewise_merge_join/existence_join.rs:238-249 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"e29b8cb77355087dd83a90c44a395dae8a1137b6427663b8687b34416fd08676"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:523-534 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:471-482 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/symmetric_hash_join.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/exec.rs"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8e1b11cf61838e323fcaca1d9f83afdf2fd55eb826cf63bfe580bfe5b8659be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201312 lines \u00D7 2): datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs:1266-1274 | datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs:1318-1329 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":1266}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bea46cedc4c53e9858d6b51c077fb7c639bb0e90e44c0608ffa426b8a54593e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201312 lines \u00D7 2): datafusion/physical-plan/src/joins/proto.rs:37-48 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:706-715 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/proto.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bb2d5bbc6aacd9e2043b05e453e1aa9895becd855c6d3fa05ecec5cf52f24d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs:586-597 | datafusion/physical-plan/src/windows/window_agg_exec.rs:382-393 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs\u0060 and \u0060datafusion/physical-plan/src/windows/window_agg_exec.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ef6fed70270a585fc9b7af1fdf876892e79cdbb881488d9f3758549a527fa6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/proto/src/logical_plan/mod.rs:937-948 | datafusion/proto/src/logical_plan/mod.rs:964-975 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/mod.rs"},"region":{"startLine":937}}}],"partialFingerprints":{"codehealthFindingId/v1":"8532f6f630ccd7490c208a031150a702f6af50273d916433f605e59a736fae37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/proto/src/logical_plan/from_proto.rs:359-370 | datafusion/proto/src/logical_plan/from_proto.rs:376-387 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"983431920fa48e38ecac0525826378101a081c9fa9818992974bd38a4bc21712"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/sql/src/expr/function.rs:716-727 | datafusion/sql/src/expr/function.rs:872-883 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"367dabdab69ec659f7147bfd06734444b8dd1229fc26022effac5f6feff77bb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/sql/src/unparser/expr.rs:925-936 | datafusion/sql/src/unparser/expr.rs:939-950 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed6f19b65457adc11228447b46940b6f2cd0738bd324b994541449b1ec75b837"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 3): datafusion/catalog/src/information_schema.rs:117-127 | datafusion/catalog/src/information_schema.rs:173-181 | datafusion/catalog/src/information_schema.rs:203-211 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a554033f51f1fc6921994e73281cadf8f0a5d0b92745c9e9360ff577d1c095"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): datafusion/catalog/src/information_schema.rs:262-272 | datafusion/catalog/src/information_schema.rs:282-292 | datafusion/catalog/src/information_schema.rs:302-312 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"68546f7f04176e680a3ca28be0edb4ebf92de011e80c3f09f798f95aef75585a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): datafusion/ffi/src/table_provider.rs:295-305 | datafusion/ffi/src/table_provider.rs:376-386 | datafusion/ffi/src/table_provider.rs:414-424 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/table_provider.rs"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a964968a49922cb629e1943e38939c68d1c660fbd5b40edf4c40cc2e3dd56a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): datafusion/functions/src/regex/regexpcount.rs:419-429 | datafusion/functions/src/regex/regexpcount.rs:456-466 | datafusion/functions/src/regex/regexpcount.rs:492-502 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"116792bfadd9fc42efbc1b0d398fb540eed9a3fd604b3a4946c826c5661bc8bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): datafusion/functions/src/string/btrim.rs:97-107 | datafusion/functions/src/string/ltrim.rs:102-112 | datafusion/functions/src/string/rtrim.rs:102-112 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ltrim.rs\u0060 and \u0060datafusion/functions/src/string/rtrim.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/btrim.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"a558bd0cf5ac5c42bb68d83061036a18769546a099899ed1d559887bc306b65b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 3): datafusion/functions-nested/src/utils.rs:141-151 | datafusion/functions/src/utils.rs:147-156 | datafusion/spark/src/function/functions_nested_utils.rs:43-53 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/utils.rs\u0060 and \u0060datafusion/spark/src/function/functions_nested_utils.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/utils.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8d899acc03e9eebafd56cb80298d783992e76140f2aaaede87daf5a721b4792"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): datafusion/functions-aggregate/src/first_last/state.rs:204-214 | datafusion/functions-aggregate/src/first_last/state.rs:218-228 | datafusion/functions-aggregate/src/first_last/state.rs:231-241 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last/state.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"dde103dd0cd7264dbccadfd24244d0732ee31e1945ee86cdbfae24c825d467bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): datafusion/physical-plan/src/joins/hash_join/exec.rs:1514-1524 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:442-452 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:385-395 \u2014 \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 33 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1514}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ef7d09287685fc7b973858e29645432ff8641765cc4ad646adfc6ff02d562d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): datafusion/common/src/dfschema.rs:638-648 | datafusion/common/src/dfschema.rs:1322-1331 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"e177e1e3cf531bd7205faad502ba98d7285cb89ae72638713d4581a57eea1262"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/datasource-parquet/src/file_format.rs:451-461 | datafusion/datasource-parquet/src/file_format.rs:472-482 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/file_format.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"307e5e41a39463a80ca840095c7329d020ff557b16893bb1ddda95b2e8f3bc9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/expr/src/expr.rs:3033-3043 | datafusion/expr/src/expr.rs:3306-3316 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3033}}}],"partialFingerprints":{"codehealthFindingId/v1":"89eab10bcf48b3c57e9d7eee21f96e8ec6ec03c0a0626d06cb7fa20d0180dde8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): datafusion/expr/src/logical_plan/builder.rs:1312-1322 | datafusion/expr/src/logical_plan/builder.rs:1324-1333 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":1312}}}],"partialFingerprints":{"codehealthFindingId/v1":"45649175aee7f5ffab19965abec634f22af96acc413d2c97635ad13b86401346"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/functions/src/core/arrow_cast.rs:132-142 | datafusion/functions/src/core/arrow_try_cast.rs:103-113 \u2014 before extracting anything, compare \u0060datafusion/functions/src/core/arrow_cast.rs\u0060 and \u0060datafusion/functions/src/core/arrow_try_cast.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/arrow_cast.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c83350084b0cbc7c5324f5dc5e5e4b94174301afb95ccd1417764e1ed4561a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/functions/src/math/ceil.rs:67-77 | datafusion/functions/src/math/floor.rs:71-81 \u2014 before extracting anything, compare \u0060datafusion/functions/src/math/ceil.rs\u0060 and \u0060datafusion/functions/src/math/floor.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/ceil.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8a635304d50d458f6f454e0f48b839b70dab46a0d3f4adebc0edd861f2b6528"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/functions-aggregate/src/approx_distinct.rs:169-179 | datafusion/functions-aggregate/src/approx_distinct.rs:229-239 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/approx_distinct.rs"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"8688a4d7acaf508e8565ac8e2af954a3c2384d71b98f2b3b31c8385bd0c90709"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/functions-aggregate/src/covariance.rs:109-119 | datafusion/functions-aggregate/src/covariance.rs:196-206 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/covariance.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed43c960991431fa32e326eaf480bc568fd83f9ed23c9ed21efc6b836f03aca5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/functions-aggregate/src/min_max/min_max_bytes.rs:75-85 | datafusion/functions-aggregate/src/min_max/min_max_bytes.rs:89-99 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max/min_max_bytes.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f1c6371387b52b790c86356c1e2810485174a4fe1fb1a073e758504eca9afb8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/optimizer/src/analyzer/type_coercion.rs:617-627 | datafusion/optimizer/src/analyzer/type_coercion.rs:646-656 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4501e05e230267ffeb0680729fa48fa3876fe52ec8585c91a4c9886d7ada82c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-expr/src/expressions/case.rs:865-875 | datafusion/physical-expr/src/expressions/case.rs:952-962 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/case.rs"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"67181af663539451a3735252c3a8a30a3659b797d1a0b3af01104d440c25fb44"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-expr/src/expressions/cast.rs:94-104 | datafusion/physical-expr/src/expressions/try_cast.rs:66-76 \u2014 before extracting anything, compare \u0060datafusion/physical-expr/src/expressions/cast.rs\u0060 and \u0060datafusion/physical-expr/src/expressions/try_cast.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/cast.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"85e1fa895f5c1c95e346ef852fe2d12212b6c9c90400c6b663cd433fea171e1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-expr/src/higher_order_function.rs:259-269 | datafusion/physical-expr/src/scalar_function.rs:192-202 \u2014 before extracting anything, compare \u0060datafusion/physical-expr/src/higher_order_function.rs\u0060 and \u0060datafusion/physical-expr/src/scalar_function.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 42 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/higher_order_function.rs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"14ac30ba34f30106bab4df089b40da7d70efd0eec26ec1e8592d612b2f262352"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-expr-common/src/physical_expr.rs:878-888 | datafusion/physical-expr-common/src/sort_expr.rs:392-402 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/physical_expr.rs"},"region":{"startLine":878}}}],"partialFingerprints":{"codehealthFindingId/v1":"f20cd0c3382c41d7658499b5d8a6c0beb34b7ceddf058e8960527eee9accc009"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-optimizer/src/utils.rs:43-53 | datafusion/physical-optimizer/src/utils.rs:71-81 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/utils.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"14be58d5bee14bfd9bf2949e389255295add221a152e4ab3d5d38a0bbf2f5a61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-plan/src/aggregates/mod.rs:2038-2048 | datafusion/physical-plan/src/aggregates/mod.rs:2095-2105 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2038}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b0eff7c21f5f4479e2ba21ef5d8a693d93034266dd2bd986c10f8d49d01391"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_final_stream.rs:389-399 | datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs:347-358 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_final_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_final_stream.rs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"f659f290d6b39f3c2f307be9e2d8e4c727b75bf5d0efb8b679b793f35551295b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_final_stream.rs:416-425 | datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs:378-388 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_final_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_final_stream.rs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"f474e44a0a7cbc8b90bf99133010efbe9ea01a6d65253a1fc15f04f1dc3b32e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-plan/src/display.rs:586-596 | datafusion/physical-plan/src/display.rs:600-610 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb7b15b0b0c8eabbcf2ea569b99b89f272ea1993869ad82cd0dad4a1ad88b47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): datafusion/physical-plan/src/joins/nested_loop_join.rs:2654-2664 | datafusion/physical-plan/src/joins/nested_loop_join.rs:3014-3023 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":2654}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c43be2a94e5a0db29a0cbf6c6c18739981beb35dc37d8f5d2b2eb55a3b339e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-plan/src/joins/nested_loop_join.rs:2954-2964 | datafusion/physical-plan/src/joins/nested_loop_join.rs:3053-3063 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":2954}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbdda1cb046bf54c4a03de0880d3120985b79efd6b3c9597ce399b93eb643c25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-plan/src/repartition/range.rs:423-433 | datafusion/physical-plan/src/repartition/range.rs:483-493 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/range.rs"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a71c8e84e23dd36a0a2ed95cdf40c9ad8782b4b26e6217872cd6d883e6a480b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/proto/src/logical_plan/from_proto.rs:436-446 | datafusion/proto/src/logical_plan/from_proto.rs:450-460 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"028b4e26ef0907210ca2d1b0b681605f9f3f147a1a3e0af9c518028f16fcbecd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/spark/src/function/datetime/from_utc_timestamp.rs:146-156 | datafusion/spark/src/function/datetime/to_utc_timestamp.rs:148-158 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/from_utc_timestamp.rs\u0060 and \u0060datafusion/spark/src/function/datetime/to_utc_timestamp.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 70 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/from_utc_timestamp.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"3be7e75d6bc3c2b4dd4f3caa7f7fd270814c33b2e41ab8efa433f49557304f2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u201311 lines \u00D7 3): datafusion/spark/src/function/string/format_string.rs:1105-1115 | datafusion/spark/src/function/string/format_string.rs:1122-1132 | datafusion/spark/src/function/string/format_string.rs:1138-1142 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1105}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dcec3fe77cbcd4d724a8c8081b4bb9670ff0b951ac711e23e9053dd8475554d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/spark/src/function/string/format_string.rs:1701-1711 | datafusion/spark/src/function/string/format_string.rs:1976-1986 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1701}}}],"partialFingerprints":{"codehealthFindingId/v1":"e10a535c0301458dfaa58fa27b35e455c43c4c887027bafef4e6efce27098331"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/sql/src/expr/function.rs:366-376 | datafusion/sql/src/expr/function.rs:544-554 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf5b1d0a1ba1f1257b641db63440bd23813ef165fbd44e975d92fe9b1ed64d62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): datafusion/sql/src/unparser/plan.rs:2527-2536 | datafusion/sql/src/unparser/utils.rs:393-403 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":2527}}}],"partialFingerprints":{"codehealthFindingId/v1":"26fe352ab38464de2bb0e15a075fa9d7329e1a00fe9ed779a9fa686eccaf1244"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/sql/src/unparser/utils.rs:80-90 | datafusion/sql/src/unparser/utils.rs:103-113 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/utils.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"c74b5615a1c473faa366f45de5774dfa0ba8c3d057850d42067a56494fba4a42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): datafusion/common/src/scalar/mod.rs:4458-4467 | datafusion/common/src/scalar/mod.rs:4477-4486 | datafusion/common/src/scalar/mod.rs:4496-4505 | datafusion/common/src/scalar/mod.rs:4515-4524 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":4458}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c64a01bccae33dd46b68aeb725cf2570eaf007c423d423c1d2bb5bdcdd3e61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 4): datafusion/core/src/execution/session_state.rs:2341-2349 | datafusion/core/src/execution/session_state.rs:2355-2364 | datafusion/core/src/execution/session_state.rs:2370-2378 | datafusion/core/src/execution/session_state.rs:2384-2392 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":2341}}}],"partialFingerprints":{"codehealthFindingId/v1":"a72b24513b6a96dfa411f697e2de90d69a5a064b7b45958d73f7635a1f8e55a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): datafusion/ffi/src/table_provider.rs:297-306 | datafusion/ffi/src/table_provider.rs:378-387 | datafusion/ffi/src/table_provider.rs:416-425 | datafusion/ffi/src/table_provider.rs:477-486 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/table_provider.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd0a0b14d2de1544b564419a8da88c958935ee8ca268e6735805d4cf5f71f81d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): datafusion/functions/src/math/nanvl.rs:76-85 | datafusion/functions/src/math/round.rs:193-202 | datafusion/functions/src/math/trunc.rs:88-102 | datafusion/spark/src/function/math/round.rs:69-79 \u2014 before extracting anything, compare \u0060datafusion/functions/src/math/round.rs\u0060 and \u0060datafusion/functions/src/math/trunc.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/nanvl.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"c264e3225c5f3b26eba661c21c2f28b22de7924bd333a2cb450d53e94f5db7ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 4): datafusion/functions/src/regex/regexpcount.rs:106-114 | datafusion/functions/src/regex/regexpinstr.rs:124-132 | datafusion/functions/src/regex/regexpmatch.rs:124-132 | datafusion/functions/src/utils.rs:125-134 \u2014 before extracting anything, compare \u0060datafusion/functions/src/regex/regexpcount.rs\u0060 and \u0060datafusion/functions/src/regex/regexpinstr.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"b304ddbb8bd3beafae60e66241c05bab231e2b129f9580e68ffa95ff8558efe3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): datafusion/physical-plan/src/filter.rs:508-517 | datafusion/physical-plan/src/joins/asof_join.rs:293-302 | datafusion/physical-plan/src/joins/hash_join/exec.rs:1373-1382 | datafusion/physical-plan/src/joins/nested_loop_join.rs:436-445 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/asof_join.rs\u0060 and \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/filter.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d2aa2f04ac6780a58a509df63fba1d48df6a782f97390eec28c9b75a207178"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): datafusion/proto-common/src/to_proto/mod.rs:436-445 | datafusion/proto-common/src/to_proto/mod.rs:452-461 | datafusion/proto-common/src/to_proto/mod.rs:468-477 | datafusion/proto-common/src/to_proto/mod.rs:484-493 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/to_proto/mod.rs"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fad10e01a4b5ae8f88b890a4229511c4af28f947d3ec7f4095ce2a1b3e78aa3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): datafusion/functions/src/math/round.rs:213-222 | datafusion/functions/src/math/trunc.rs:108-117 | datafusion/spark/src/function/math/round.rs:94-106 \u2014 before extracting anything, compare \u0060datafusion/functions/src/math/round.rs\u0060 and \u0060datafusion/functions/src/math/trunc.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"27871ec9f13254b412b503bf7641ef7c30d616eca98a6cf7596e190c5800d77d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/common/src/dfschema.rs:717-726 | datafusion/common/src/dfschema.rs:786-795 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"06ac8775a6274f67923f2887c8bfa0fb9fa5ddd4e50f6d5a520c1e794173acf2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/common/src/hash_utils.rs:362-371 | datafusion/common/src/hash_utils/build_hasher.rs:257-266 \u2014 before extracting anything, compare \u0060datafusion/common/src/hash_utils.rs\u0060 and \u0060datafusion/common/src/hash_utils/build_hasher.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"36b780b8ceff562cfb23bab55eb4ec697f844500755f06e41c37c1c727c91f70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/common/src/hash_utils.rs:710-719 | datafusion/common/src/hash_utils.rs:753-762 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d195f03a62b32da184ed1bc83ef36fdcd747f9941f8b1acf0494ff72e8caea4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/core/src/execution/context/mod.rs:906-915 | datafusion/core/src/execution/context/mod.rs:925-934 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/context/mod.rs"},"region":{"startLine":906}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf0e2e9d3279772cdb8eaed79040580d446fb2ab4f3a8421c1b8a51b268217f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/datasource/src/boundary_stream.rs:238-247 | datafusion/datasource/src/boundary_stream.rs:279-288 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/boundary_stream.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2f1359c6d8c2f981ff07f95facde793768da21f4bcc6fecd6cb33aa429db2dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/datasource/src/file_compression_type.rs:145-154 | datafusion/datasource/src/file_compression_type.rs:245-254 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_compression_type.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5859088dc328b2ebdc104db4b05736e1bddf96d30058dfea69affb8f396e64f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u201310 lines \u00D7 2): datafusion/datasource/src/memory.rs:744-749 | datafusion/physical-plan/src/joins/hash_join/exec.rs:2318-2327 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/memory.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"d66e3079809ca28509b622ae8b60b8de1bd53b38503ffde8e9aafd99f6fb1ce1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/expr/src/expr_fn.rs:925-934 | datafusion/expr/src/expr_fn.rs:965-974 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_fn.rs"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"219e1759e059d49bc4eae38b73f8ab63c1447ddc6a0ae0b0df36347100e32b42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/expr/src/higher_order_function.rs:1423-1432 | datafusion/physical-expr/src/expressions/lambda.rs:343-352 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":1423}}}],"partialFingerprints":{"codehealthFindingId/v1":"634654b59a7e15c677cdede9c827959a79a37b6e0f0a500789b760425355d6a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/expr/src/logical_plan/builder.rs:1866-1875 | datafusion/physical-plan/src/joins/utils.rs:336-345 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":1866}}}],"partialFingerprints":{"codehealthFindingId/v1":"3177998b6440bb95cb1dac3b75d04f58b77a32b16465b4afa6aadfb74958d803"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/expr/src/logical_plan/display.rs:318-327 | datafusion/expr/src/logical_plan/plan.rs:2089-2098 \u2014 before extracting anything, compare \u0060datafusion/expr/src/logical_plan/display.rs\u0060 and \u0060datafusion/expr/src/logical_plan/plan.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/display.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bea63edec6d244db38bac8fcbed73981e6c5715e2ca65b056c6d41313955fbe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 2): datafusion/expr/src/logical_plan/display.rs:360-367 | datafusion/expr/src/logical_plan/plan.rs:2128-2137 \u2014 before extracting anything, compare \u0060datafusion/expr/src/logical_plan/display.rs\u0060 and \u0060datafusion/expr/src/logical_plan/plan.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/display.rs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"1adc1a4149971839410e86deb8739695674341cee2bf518092ab875c0018d54a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/expr/src/type_coercion/functions.rs:1076-1085 | datafusion/expr/src/type_coercion/functions.rs:1104-1113 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":1076}}}],"partialFingerprints":{"codehealthFindingId/v1":"33031c17b65c45bb70406aa0408890cee5b716669dba4a2a20a07aaa4ced5fb6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): datafusion/functions/src/core/overlay.rs:283-291 | datafusion/functions/src/core/overlay.rs:295-304 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/overlay.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"90f0d7229991b103ebe3f2dc2595602491f23a6a23c14f4b16e2cece9226e124"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): datafusion/functions/src/string/chr.rs:52-60 | datafusion/functions/src/string/chr.rs:64-73 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/chr.rs"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c943bd0a80ff621ae8c8e396e6309503ce5c54d56519e254c80f071878ef250"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/functions/src/string/levenshtein.rs:274-283 | datafusion/functions/src/string/levenshtein.rs:294-303 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/levenshtein.rs"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"32203dc62338b159c368892bc7b207b690e3e8bbac6068d620fd03a241b80bce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): datafusion/functions/src/string/repeat.rs:324-332 | datafusion/functions/src/string/split_part.rs:567-576 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/repeat.rs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"394e338b45357420b666b3650323ce798030206f3aa1399c0aba4a99397074e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): datafusion/functions/src/string/repeat.rs:332-340 | datafusion/functions/src/string/repeat.rs:345-354 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/repeat.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9b6e4c57f3fa5db1cb2cc56a851117e57e9a4992e4444cc7d948847256445da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/functions/src/unicode/find_in_set.rs:289-298 | datafusion/functions/src/unicode/find_in_set.rs:316-325 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/find_in_set.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab8a7b663cbaccd9ff607f816265834fb757cacaded749abe6e87688c32b2571"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/optimizer/src/push_down_filter.rs:1040-1049 | datafusion/optimizer/src/push_down_filter.rs:1114-1131 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":1040}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e46f3322187b8b067a7f287c0f9337b7b1a2b807446ee4443cedd5b43bcc98a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/optimizer/src/scalar_subquery_to_join.rs:131-140 | datafusion/optimizer/src/scalar_subquery_to_join.rs:204-213 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/scalar_subquery_to_join.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e1b7862243c5ca5c94eb37cb9249cfa04283a459c13b11551852a7f3cbf171b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-expr-common/src/binary_map.rs:650-659 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes.rs:410-419 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/binary_map.rs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"d930a032c33adb8fc63230a4e16e167c1f69c0c82f4ca3750072df9a9900564e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-expr-common/src/binary_view_map.rs:428-437 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes_view.rs:340-349 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/binary_view_map.rs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"000f3bfac17e53ae11213ff1953dcb5539cc61818886051916d937e4a7741bb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs:1050-1059 | datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs:1132-1141 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe2a157c0a1441bf92b379b5e4902fc2299386bf1ee0a21919054adb714ca82f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 2): datafusion/physical-plan/src/aggregates/mod.rs:2598-2607 | datafusion/proto/src/physical_plan/to_proto.rs:61-68 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2598}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5601f01421d446eecb7c8c3266c78a440a4cffda5748717fbd115cd0ed43cdf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/aggregates/mod.rs:2685-2694 | datafusion/physical-plan/src/aggregates/mod.rs:2695-2704 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2685}}}],"partialFingerprints":{"codehealthFindingId/v1":"b183c4ae5f04f7f571a25bcc10ec751019d33966655d945d692370b6feb1d9df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_single_stream.rs:453-462 | datafusion/physical-plan/src/aggregates/single_stream.rs:485-494 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_single_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/single_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 101 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b690c858395f23cbbbff5372e147231003f95d77ba53a81273f8e47bcde9808"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_single_stream.rs:558-567 | datafusion/physical-plan/src/aggregates/single_stream.rs:585-594 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_single_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/single_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 101 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a5b01a854ec199cef4b556c522f704b0fa64a13b70a5e4ec19930f55623c9e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/display.rs:318-327 | datafusion/physical-plan/src/display.rs:516-525 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"dac1f14815c76ccfae4d779049700aa1b6f920af11e1247de125d5ed56f4cb00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/joins/asof_join.rs:654-663 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:780-789 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/asof_join.rs\u0060 and \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ff3899547da098ab2e4bb318855c54a32fd0e279e03e7f18aae1d4354dc5764"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): datafusion/physical-plan/src/joins/asof_join.rs:746-754 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:874-883 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/asof_join.rs\u0060 and \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":746}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eb71dd6c4eca6ae9e666ba757420805d3282c4b13766e32db5ede6933badc30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs:489-498 | datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs:525-534 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"a398305d2a19de9e9c67053ecfbf991f5e405cf4f6783de3ddd6b9b9e7181361"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/sorts/sort.rs:1592-1601 | datafusion/physical-plan/src/sorts/sort_preserving_merge.rs:453-462 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/sort.rs"},"region":{"startLine":1592}}}],"partialFingerprints":{"codehealthFindingId/v1":"4995dec482ff5180b1acd9583dcf51aec652732bf3f012766653650ce7e10dcf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/spill/mod.rs:232-241 | datafusion/physical-plan/src/spill/mod.rs:267-276 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/spill/mod.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"0457745ffcd09a2d51589f00ec9915d9d536828e5c08635a6dbe8a1be942e4ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs:426-435 | datafusion/physical-plan/src/windows/window_agg_exec.rs:222-231 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs\u0060 and \u0060datafusion/physical-plan/src/windows/window_agg_exec.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"b461976d1fcf3b11ce55b2595d70fc57ac331d2dad4a58cc6a995c9a9bf1aa96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u201310 lines \u00D7 3): datafusion/spark/src/function/string/format_string.rs:1199-1207 | datafusion/spark/src/function/string/format_string.rs:1216-1225 | datafusion/spark/src/function/string/format_string.rs:1235-1239 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ddcd1098b9710ca54ca7db517d0e7edafa2d98d9b1ab477fc289ab018763a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/sql/src/expr/function.rs:1032-1041 | datafusion/sql/src/expr/function.rs:1088-1097 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":1032}}}],"partialFingerprints":{"codehealthFindingId/v1":"88322fd74de91020ea7f2083e2fbe783850b1fb116dd75bbe03a128ccd28696b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/sql/src/unparser/plan.rs:396-405 | datafusion/sql/src/unparser/plan.rs:1366-1375 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d1260f1eb4da67802392832ba9cc83284c49f4605e436697aeb5bb82bdc2c7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/sql/src/unparser/plan.rs:445-454 | datafusion/sql/src/unparser/plan.rs:560-569 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb17141fc53c00389418d10ee92725a98510f6744fd89e8db0792a2ed8da421"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/sql/src/unparser/expr.rs:1602-1611 | datafusion/sql/src/unparser/expr.rs:1683-1692 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":1602}}}],"partialFingerprints":{"codehealthFindingId/v1":"9161a3fb64090a4b3c462f611b8756fcc2a32a39022df978f4ec118e857b082e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 5): datafusion/ffi/src/catalog_provider.rs:238-246 | datafusion/ffi/src/catalog_provider_list.rs:202-210 | datafusion/ffi/src/schema_provider.rs:248-256 | datafusion/ffi/src/table_provider_factory.rs:106-114 | datafusion/ffi/src/udtf.rs:206-215 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/catalog_provider.rs\u0060 and \u0060datafusion/ffi/src/catalog_provider_list.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/catalog_provider.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d5c39b8a37f89b7a109ac37f94c7a1da9b39084de8899028cf9f4191bb8e22f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): datafusion/physical-expr/src/aggregate.rs:744-752 | datafusion/physical-expr/src/aggregate.rs:842-850 | datafusion/physical-expr/src/aggregate.rs:912-920 | datafusion/physical-expr/src/aggregate.rs:932-940 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/aggregate.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ecc45655e9e611d1e71b0db0b7631d826c597005df83798701d4dc94f483c2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): datafusion/catalog/src/information_schema.rs:489-497 | datafusion/catalog/src/information_schema.rs:525-533 | datafusion/catalog/src/information_schema.rs:561-569 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"e616a69a4114e497f7358c56fd7f3f6e3888c0f4fc9aec9a2dd4ce68407e6ae7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): datafusion/datasource/src/boundary_stream.rs:241-249 | datafusion/datasource/src/boundary_stream.rs:282-290 | datafusion/datasource/src/boundary_stream.rs:379-387 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/boundary_stream.rs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"e622f88a6b10fd8c71006679361cef215232dd02e8083111d8a493d79bf45902"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): datafusion/ffi/src/catalog_provider.rs:198-206 | datafusion/ffi/src/catalog_provider_list.rs:163-171 | datafusion/ffi/src/schema_provider.rs:206-214 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/catalog_provider.rs\u0060 and \u0060datafusion/ffi/src/catalog_provider_list.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/catalog_provider.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe526ed2ba966b42222f0391cb72b9f05d4786a4dfd5f5151bb4a26f0b1ef2c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 3): datafusion/functions/src/regex/regexpinstr.rs:227-233 | datafusion/functions/src/regex/regexpinstr.rs:245-253 | datafusion/functions/src/regex/regexpinstr.rs:265-273 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpinstr.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c7e852b24eca7d24094b8e4cac902371d429f35e6bda527152343daf3b066f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): datafusion/functions-nested/src/utils.rs:127-135 | datafusion/functions/src/utils.rs:120-128 | datafusion/spark/src/function/functions_nested_utils.rs:29-37 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/utils.rs\u0060 and \u0060datafusion/spark/src/function/functions_nested_utils.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/utils.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c303c0368e78b14b177579aaa1ef8bfc85c3999499b7b5bdc50746f4b812e25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): datafusion/functions-nested/src/except.rs:223-231 | datafusion/functions-nested/src/set_ops.rs:496-504 | datafusion/functions-nested/src/set_ops.rs:607-615 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/except.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"6af2e7a72d84be471a5544c93429717e92ca352e677b4628a0dac7640f50ff49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): datafusion/proto/src/logical_plan/mod.rs:710-718 | datafusion/proto/src/logical_plan/mod.rs:1189-1197 | datafusion/proto/src/logical_plan/mod.rs:1337-1345 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/mod.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"100ca508f1f4a2fea389e88debcd57623bf6e9cb40ac0e491a6a26e1a52f17e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/catalog/src/information_schema.rs:1046-1054 | datafusion/catalog/src/information_schema.rs:1088-1096 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":1046}}}],"partialFingerprints":{"codehealthFindingId/v1":"aed9afe4bbabb1c32aa41309782ca16a3cf26398ee41a61b475f5b92ebd09dce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 2): datafusion/common/src/hash_utils.rs:470-478 | datafusion/common/src/hash_utils/build_hasher.rs:350-356 \u2014 before extracting anything, compare \u0060datafusion/common/src/hash_utils.rs\u0060 and \u0060datafusion/common/src/hash_utils/build_hasher.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/hash_utils.rs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"65ec1fdf09dd60e2ae5b487a3be7a4be14112d841166e25cee1989f0a2abd41b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/common/src/utils/mod.rs:159-167 | datafusion/common/src/utils/mod.rs:208-216 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/utils/mod.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"23042ce3c8a8cf3d22c5fee636d8f9091b077c99359271a58993b768ccd67048"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): datafusion/expr/src/expr.rs:2813-2821 | datafusion/optimizer/src/eliminate_filter.rs:215-222 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":2813}}}],"partialFingerprints":{"codehealthFindingId/v1":"201ce84eb8fea3988d8c8aa7788f8d06f81c782cf65f4457b2eec991c59b482b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/expr/src/higher_order_function.rs:1258-1266 | datafusion/sql/src/expr/function.rs:439-449 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":1258}}}],"partialFingerprints":{"codehealthFindingId/v1":"27a35ce81dc9f32d7f0e49fb426c77dec0bf2136efd10f5f59acc57d213e61b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/expr/src/utils.rs:1228-1236 | datafusion/expr/src/utils.rs:1252-1260 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/utils.rs"},"region":{"startLine":1228}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcf7ddbee9ad7c891836d0de97a81701fb82e637f6a5da16e7048fe9184c13db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/expr-common/src/sort_properties.rs:68-76 | datafusion/expr-common/src/sort_properties.rs:88-96 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/sort_properties.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b850705501885a86e1d496b3ea32f88340106c5f7e0afc266e38de921384dbe5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/ffi/src/config/mod.rs:93-101 | datafusion/ffi/src/config/mod.rs:106-114 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/config/mod.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1f2f6bc6ebe9d24f0e5d8a8c4f9b3b4eff8508db12602959c2e046508a26de9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:210-218 | datafusion/ffi/src/proto/physical_extension_codec.rs:196-204 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"1236b0b93772bc6a3f07ecfedba919f5ed5741d4a775427b1367ceed6a4bdbac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:236-244 | datafusion/ffi/src/proto/physical_extension_codec.rs:222-230 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"d440e8917a04b2d7d6f670f5d8a867c010d795bf05f2fb57d5b90c440207ce79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:262-270 | datafusion/ffi/src/proto/physical_extension_codec.rs:248-256 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd523b8f8d8185c92d436929b65608c38a67ade23fa86b28ae1b3154f4e65470"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions/src/crypto/basic.rs:136-144 | datafusion/functions/src/crypto/basic.rs:167-175 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/crypto/basic.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fa886ce446b5b0e6937ed638bb41c9e4d2fd80afd18d8b5f98550d7ccf88a30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): datafusion/functions/src/unicode/find_in_set.rs:280-287 | datafusion/functions/src/unicode/find_in_set.rs:308-316 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/find_in_set.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2d6245ce6e06455175060bd459b1652d8ad51dc10ff709f197986f7f296d16a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:86-94 | datafusion/functions/src/unicode/rpad.rs:86-94 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"675bc06723921b5488045abaac178b9f1a2e4a9f5f6164f2624918e916b388d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:428-436 | datafusion/functions/src/unicode/rpad.rs:428-436 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"39b9fe516f044d145dc16c6630bb40156ecefac9e2ed52adc609495a58834e85"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions/src/math/monotonicity.rs:107-115 | datafusion/functions/src/math/monotonicity.rs:204-212 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/monotonicity.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"03b4bc77ee2564b4ad0afde5175b37b7dfaf0d181feb53d389edda5deefc6a50"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions-aggregate/src/average.rs:302-310 | datafusion/functions-aggregate/src/average.rs:324-332 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/average.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"55da3e66226710f40b892eeab2bf51ad8545b9ef0e1c6ef139f9a3b89411b81a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions-aggregate/src/covariance.rs:347-355 | datafusion/functions-aggregate/src/regr.rs:673-681 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/covariance.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"28d8d97ab5b949745a4085c12499d8662a03c4140aeacee8d480c1009fb429f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions-aggregate/src/first_last.rs:310-318 | datafusion/functions-aggregate/src/first_last.rs:1230-1238 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de3a862750716128048e371f5c6ac423d4b33cdfb0962f4ed695796deb41b57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): datafusion/functions-aggregate/src/lib.rs:196-204 | datafusion/spark/src/lib.rs:228-235 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/lib.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1ddd6e8326bc23aa315615095a3f853395d2c759d878525bc15fe8f7a3520cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions-nested/src/concat.rs:115-123 | datafusion/functions-nested/src/concat.rs:206-214 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/concat.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a14121c4dc555b4d80759c344a6fa7c8477b460ccffdf8e024566614ed4cc9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions-nested/src/remove.rs:119-127 | datafusion/functions-nested/src/remove.rs:358-366 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/remove.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f0d9ad27f34a3a365d1f671fec852b421dafa0c6c33f0fcfa9b3b1cd7e15ee0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions-nested/src/replace.rs:135-143 | datafusion/functions-nested/src/replace.rs:361-369 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/replace.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"508957788be4f223bb7006d97c113c85dedb67fbeaea97b87f66abf8addc8223"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions-table/src/generate_series.rs:805-813 | datafusion/functions-table/src/generate_series.rs:831-839 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-table/src/generate_series.rs"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe496302aeebf0e418331030ae0a112682958c2e70b8e82d4e5d5d628530e01f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-expr/src/equivalence/properties/mod.rs:396-404 | datafusion/physical-expr/src/equivalence/properties/mod.rs:464-472 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/mod.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"02cad8c350fb0adf47987beb220a3fa4d2204a25cb02dad8f5562121e18efbea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-expr/src/higher_order_function.rs:475-483 | datafusion/physical-expr/src/scalar_function.rs:335-343 \u2014 before extracting anything, compare \u0060datafusion/physical-expr/src/higher_order_function.rs\u0060 and \u0060datafusion/physical-expr/src/scalar_function.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 42 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/higher_order_function.rs"},"region":{"startLine":475}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dda110cb30f00cb02d17066f3516f5d00be5645b83cbef5e57e98c4c0a791ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs:834-842 | datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs:848-856 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"e70665ac1882a5d838f462e74b8a747b5ba72fe8f87a42f5c3d3161508ec8851"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-optimizer/src/filter_pushdown.rs:624-632 | datafusion/physical-optimizer/src/filter_pushdown.rs:685-693 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/filter_pushdown.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e28421697485f20d3499741398b7e8cf35e3f5a5944c8126ad4e5e308398297"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs:426-434 | datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs:798-806 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cb34c22a9eeb2070df4ab2c88fa090e105697fabf8174227f6b1ebd4a3b3da5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/aggregates/ordered_single_stream.rs:155-163 | datafusion/physical-plan/src/aggregates/single_stream.rs:183-191 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/ordered_single_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/single_stream.rs\u0060 as WHOLE FILES: this scan already matched 8 separate duplicated blocks between them, totalling at least 101 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_single_stream.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"be7ac6b78a54e4510f8b9f9deb6ea7cdd4ab52d3c16e4d6a0c136f9ad248a2bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/display.rs:304-312 | datafusion/physical-plan/src/display.rs:501-509 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f36e6139fb2503b5e2bb3e921d9ff507f83e65c42b7eb4ad57d7c78d29f6ce7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/display.rs:597-605 | datafusion/physical-plan/src/display.rs:703-711 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":597}}}],"partialFingerprints":{"codehealthFindingId/v1":"f03cb88271fe4302c3aa1a5dd2e2f761bd7a264b5c094dea8d235b45077eeda3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/joins/hash_join/exec.rs:2171-2179 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:738-746 \u2014 \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 33 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":2171}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9e3f81839debd2a9fc8a29be355a8c5fc2c0d288646f0d81a9927a6bb98e9f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20139 lines \u00D7 2): datafusion/physical-plan/src/joins/sort_merge_join/metrics.rs:43-49 | datafusion/physical-plan/src/joins/utils.rs:1873-1881 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/metrics.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"8579bd2285aef033b1aad11df8e9cbcb26be7e805b9800796aa42547efd75d40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/joins/symmetric_hash_join.rs:582-590 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:602-610 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/symmetric_hash_join.rs"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"92a6af9b04ad89b281bb0698a7129883ade89a8ec4ae2d255a49807bdcc0ded8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/projection.rs:1131-1139 | datafusion/physical-plan/src/projection.rs:1149-1157 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/projection.rs"},"region":{"startLine":1131}}}],"partialFingerprints":{"codehealthFindingId/v1":"47290f5850d890ca923c7580c90f745eaa191a8fc088b2f2c14bedd11bea4e8b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/topk/mod.rs:1518-1526 | datafusion/physical-plan/src/topk/mod.rs:1929-1937 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1518}}}],"partialFingerprints":{"codehealthFindingId/v1":"406401f8de7aabe37c33d3dd65d53aa59aec24dc138430a1c5410c54dd9d58ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20139 lines \u00D7 2): datafusion/physical-plan/src/union.rs:196-204 | datafusion/physical-plan/src/union.rs:690-695 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/union.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"348ca46f2ffb7db409ee1eb113a1364ad0647c81cfd70d7c36764e612e057ad7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs:347-355 | datafusion/physical-plan/src/windows/window_agg_exec.rs:336-344 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs\u0060 and \u0060datafusion/physical-plan/src/windows/window_agg_exec.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eebefc9b362fc0031e8d7915c3e6f5e78e39ed2b70ea69a881ebefed658c690"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20139 lines \u00D7 2): datafusion/physical-plan/src/windows/proto.rs:45-50 | datafusion/proto/src/physical_plan/to_proto.rs:104-112 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/proto.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3244c6fc011d18c1cee0b467477f725dd32add8233430d0020b9c2690ac1ad5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/windows/proto.rs:50-58 | datafusion/physical-plan/src/windows/proto.rs:60-68 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/proto.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bbe242751c5c1a77e97220c77c6ac6bf2f9b0065339a45c6d787b7cd4d341e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/proto/src/physical_plan/to_proto.rs:112-121 | datafusion/proto/src/physical_plan/to_proto.rs:124-132 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/to_proto.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae4aea52f538e663fa1a62640d6d88714dd8f4ef17613b6f635db8e927df377c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/spark/src/function/collection/size.rs:95-103 | datafusion/spark/src/function/collection/size.rs:125-133 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/collection/size.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24c8c5391e172adcfa8a48347ebbb1709f0116a3a1fb66d19c24176cd46c4d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/spark/src/function/datetime/date_add.rs:48-56 | datafusion/spark/src/function/datetime/date_sub.rs:46-54 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/date_add.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"a36aceca474d11207a1b8bbac20f4cd1e3a2344a7936684af7663ff3f38b46ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): datafusion/spark/src/function/map/str_to_map.rs:252-259 | datafusion/spark/src/function/map/str_to_map.rs:276-284 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/map/str_to_map.rs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"5601d624ec0effbd871d65468fc84615faabccef890dbb61cff088ab08821905"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/spark/src/function/string/format_string.rs:1271-1279 | datafusion/spark/src/function/string/format_string.rs:1310-1318 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1271}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa8968a87e30f70f622374399ca3c1af48d9dc0e0821c30d1a2a75ead697d84e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/spark/src/function/url/url_decode.rs:218-226 | datafusion/spark/src/function/url/url_encode.rs:114-122 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/url/url_decode.rs"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e2c515b7c5124242bd2ea245ddc92796561e381d231999609e112b50302ad74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/sql/src/expr/function.rs:331-339 | datafusion/sql/src/expr/function.rs:820-828 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1f2ff826f473904406f427166599301bbc047cda77ead4204e481ee91686a0d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 7): datafusion/functions-nested/src/utils.rs:130-137 | datafusion/functions/src/regex/regexpcount.rs:104-111 | datafusion/functions/src/regex/regexpinstr.rs:122-129 | datafusion/functions/src/regex/regexpmatch.rs:122-129 | datafusion/functions/src/regex/regexpreplace.rs:150-157 | datafusion/functions/src/utils.rs:123-130 | datafusion/spark/src/function/functions_nested_utils.rs:32-39 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/utils.rs\u0060 and \u0060datafusion/spark/src/function/functions_nested_utils.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/utils.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aa6938e226cdb9888acc23f57f5caf10f6144c254cc2ebe74b24b39cc703f08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): datafusion/ffi/src/catalog_provider.rs:237-244 | datafusion/ffi/src/catalog_provider_list.rs:201-208 | datafusion/ffi/src/schema_provider.rs:247-254 | datafusion/ffi/src/table_provider.rs:552-562 | datafusion/ffi/src/table_provider_factory.rs:105-112 | datafusion/ffi/src/udtf.rs:205-212 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/catalog_provider.rs\u0060 and \u0060datafusion/ffi/src/catalog_provider_list.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/catalog_provider.rs"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"f80b57c4a4e8a15f5b8f983446de17f8264afbf291a5e879f9d974926381e85c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): datafusion/ffi/src/query_planner.rs:146-153 | datafusion/ffi/src/table_provider.rs:299-306 | datafusion/ffi/src/table_provider.rs:342-349 | datafusion/ffi/src/table_provider.rs:380-387 | datafusion/ffi/src/table_provider.rs:418-425 | datafusion/ffi/src/table_provider.rs:479-486 \u2014 there are 6 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/query_planner.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d8ef28bc9ae3cf23e2ce90b4199e553cfa5c0d5a24c7d433d0da5653b4cb07f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): datafusion/functions-nested/src/string.rs:205-212 | datafusion/functions/src/crypto/digest.rs:72-79 | datafusion/functions/src/regex/regexplike.rs:83-90 | datafusion/functions/src/string/btrim.rs:92-99 | datafusion/functions/src/string/ltrim.rs:97-104 | datafusion/functions/src/string/rtrim.rs:97-104 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ltrim.rs\u0060 and \u0060datafusion/functions/src/string/rtrim.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f11749e5375e1af2ab6ba7ce05a945dfeb45a6854ed98ccdce0d2c98f4b2d3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): datafusion/physical-plan/src/aggregates/mod.rs:2211-2218 | datafusion/physical-plan/src/buffer.rs:177-184 | datafusion/physical-plan/src/coalesce_partitions.rs:166-173 | datafusion/physical-plan/src/filter.rs:600-607 | datafusion/physical-plan/src/limit.rs:185-192 | datafusion/physical-plan/src/limit.rs:466-473 \u2014 there are 6 copies across 5 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2211}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce61128b01accdec2986e8f9d6de900c7bfbb733cc2d287de66703b03689ee73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 5): datafusion/physical-plan/src/async_func.rs:179-185 | datafusion/physical-plan/src/coalesce_batches.rs:189-196 | datafusion/physical-plan/src/sorts/sort_preserving_merge.rs:302-309 | datafusion/physical-plan/src/unnest.rs:245-251 | datafusion/physical-plan/src/windows/window_agg_exec.rs:270-276 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/async_func.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"879ace1f1c011744cc8065b9c0335dd07d8621ac8a7e53f15ee1b85ca196a616"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): datafusion/spark/src/function/datetime/date_trunc.rs:77-84 | datafusion/spark/src/function/datetime/from_utc_timestamp.rs:89-96 | datafusion/spark/src/function/datetime/time_trunc.rs:71-78 | datafusion/spark/src/function/datetime/to_utc_timestamp.rs:91-98 | datafusion/spark/src/function/datetime/trunc.rs:78-85 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/from_utc_timestamp.rs\u0060 and \u0060datafusion/spark/src/function/datetime/to_utc_timestamp.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 70 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/date_trunc.rs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a37ad8e754743014f19c8ea5ffcc0279517f53258b30bbd74eb58fb1a388521"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): datafusion/ffi/src/udaf/accumulator.rs:107-114 | datafusion/ffi/src/udaf/accumulator.rs:181-188 | datafusion/ffi/src/udwf/partition_evaluator.rs:114-121 | datafusion/ffi/src/udwf/partition_evaluator.rs:139-146 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/udaf/accumulator.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fbae6ea1173c3130df2aec707e3c98bb485e454144ea878470fc9e3a707c551"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): datafusion/functions/src/math/monotonicity.rs:448-455 | datafusion/functions/src/math/monotonicity.rs:486-493 | datafusion/functions/src/math/monotonicity.rs:524-531 | datafusion/functions/src/math/monotonicity.rs:651-658 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/monotonicity.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"807107ba67fd792687ab8f8fdb08c855fd3d23974294f1182aaed4b5f989356d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): datafusion/functions/src/string/levenshtein.rs:258-265 | datafusion/functions/src/string/levenshtein.rs:278-285 | datafusion/functions/src/string/levenshtein.rs:298-305 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/levenshtein.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d4c1dcd38ac91cb5d2d0a2c13c84bf106932f067cf760366f0d7d9f631b8419"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): datafusion/functions-aggregate/src/average.rs:302-309 | datafusion/functions-aggregate/src/average.rs:324-331 | datafusion/functions-aggregate/src/average.rs:427-434 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/average.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbc673984e7e63269324e210ae6f125ea599a97aab80a28aef87a7b5b50b59b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): datafusion/functions-aggregate/src/covariance.rs:348-355 | datafusion/functions-aggregate/src/regr.rs:674-681 | datafusion/functions-aggregate/src/variance.rs:391-398 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/covariance.rs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1e4f3a64882543d0e73a35556a7673d84475e71ad9d6b7a078bbf0f68849e61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): datafusion/functions-table/src/generate_series.rs:807-814 | datafusion/functions-table/src/generate_series.rs:833-840 | datafusion/functions-table/src/generate_series.rs:861-868 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-table/src/generate_series.rs"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0ec830d07d7ea2040f48ec7b5575f95f3bfa5088f6df44e2e4f65d3f03a3062"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20138 lines \u00D7 2): datafusion/common/src/scalar/mod.rs:3338-3345 | datafusion/common/src/scalar/mod.rs:3445-3450 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":3338}}}],"partialFingerprints":{"codehealthFindingId/v1":"da3b22653823737691be91e1ea7d0dc806a202362a688541b30b4229c46f74f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/core/src/dataframe/mod.rs:1066-1073 | datafusion/core/src/dataframe/mod.rs:1093-1100 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/dataframe/mod.rs"},"region":{"startLine":1066}}}],"partialFingerprints":{"codehealthFindingId/v1":"defc1389acdbd167ab60560d3f1aa16d801d69772d0387a84dd4005d32b243ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/core/src/dataframe/mod.rs:1075-1082 | datafusion/core/src/dataframe/mod.rs:1084-1091 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/dataframe/mod.rs"},"region":{"startLine":1075}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4a9bdad1b0089d69a9795d1d18f6f2222bfd00f4dab6c3b50b57afe1857ea28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): datafusion/datasource-csv/src/source.rs:519-525 | datafusion/datasource-json/src/source.rs:578-585 \u2014 before extracting anything, compare \u0060datafusion/datasource-csv/src/source.rs\u0060 and \u0060datafusion/datasource-json/src/source.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/source.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"90c411b17c873e5947c24bcf987ecd84cc555f23df8f7361be729f8c342b7540"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/datasource-parquet/src/schema_coercion.rs:444-451 | datafusion/datasource-parquet/src/schema_coercion.rs:478-485 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/schema_coercion.rs"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b67694dc58d658b3b6da00599e80cacf38ec66cc0c4d13e7821d6abdbee04cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/expr/src/expr.rs:832-839 | datafusion/physical-expr/src/expressions/binary.rs:228-235 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":832}}}],"partialFingerprints":{"codehealthFindingId/v1":"30492515e988d0f5c263c297508c064bcaecdbdf23d97392b16e015c439297e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/expr/src/expr_schema.rs:400-407 | datafusion/expr/src/expr_schema.rs:555-562 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cabfc7dc6d70dcbeb5b1b4f7e55f327d98b68285f0113dd447b0628ccaa90ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/expr-common/src/interval_arithmetic.rs:583-590 | datafusion/expr-common/src/interval_arithmetic.rs:608-615 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/interval_arithmetic.rs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"88e55f969db79eb08b9c55bb162c22806e48358dde66af6dfe8cb2378b1cfd19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/expr-common/src/interval_arithmetic.rs:2011-2018 | datafusion/expr-common/src/interval_arithmetic.rs:2051-2058 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/interval_arithmetic.rs"},"region":{"startLine":2011}}}],"partialFingerprints":{"codehealthFindingId/v1":"dea0aaca5e34b6c39e9ed40dd83a10feff985758b2a4fca72226f2efce9f78cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:477-484 | datafusion/ffi/src/proto/physical_extension_codec.rs:418-425 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"f31b07e9aecbf8b53e721072f44a82e63a8f2a535dd7de9a2fcd719d54f67007"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:496-503 | datafusion/ffi/src/proto/physical_extension_codec.rs:437-444 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"7683cc72ea29398123ffd6d092d150ed3b066c173317a86b58ebbe68c72b1e69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:194-201 | datafusion/functions/src/regex/regexpcount.rs:214-223 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e949a4fbcadb501c9c930dfbf7d3c14d71684257c5e82e845201907a20ec588"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/functions/src/string/ends_with.rs:130-137 | datafusion/functions/src/string/starts_with.rs:126-133 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ends_with.rs\u0060 and \u0060datafusion/functions/src/string/starts_with.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/ends_with.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"15461b5ed3ae0b18d4bfeda36c3007a3fede237e58c8246c72fd933f7d9e878d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/functions/src/string/split_part.rs:376-384 | datafusion/functions/src/unicode/initcap.rs:254-261 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/split_part.rs"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"e71b8192f4d136a93118a9efa3c19e78092cc4242877a095e82ea68ba84cd9d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/functions/src/strings.rs:168-175 | datafusion/functions/src/strings.rs:567-574 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/strings.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a9b49e92abc6c1a7b41f60bb8187eb6b64746c1f09c286fbfe7fbb124c8364a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/functions/src/unicode/character_length.rs:146-153 | datafusion/spark/src/function/string/length.rs:142-149 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/character_length.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"32ddeb4da4faf306bdd04f5956b311a1d13e43288f752b2b69adb9214dc11145"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:74-81 | datafusion/functions/src/unicode/rpad.rs:74-81 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5aa236e0291f9e767c56c5a34d160259130c946839a475a2224a3ee81257864"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/functions-aggregate/src/approx_distinct.rs:829-836 | datafusion/functions-aggregate/src/approx_distinct.rs:950-957 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/approx_distinct.rs"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"6da6f42806a3b3ed29b5860229847726a14a354dbb385241d2fb2982a5786fc9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/functions-nested/src/array_has.rs:989-996 | datafusion/functions-nested/src/array_has.rs:1002-1009 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_has.rs"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"160352497243fa93c32b738710641d6a24aca4366ebffcc82dae87e027dfb3e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/optimizer/src/eliminate_cross_join.rs:424-431 | datafusion/optimizer/src/eliminate_cross_join.rs:438-445 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/eliminate_cross_join.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfe83aa5126288ff5d4559163541c42a891d1af9b20cbd9df780864bb72ee79d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-expr/src/equivalence/properties/mod.rs:647-654 | datafusion/physical-expr/src/equivalence/properties/mod.rs:735-742 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/mod.rs"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"ece5bb486e1edea4d9daa0e04cdcfdf97c07af9fb2453fe04ffa0ce90c6b2870"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-expr/src/expressions/binary.rs:212-219 | datafusion/physical-expr/src/expressions/binary.rs:955-962 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"55142429db96673c6a0c038db5ad8fd0438f9579ad8fa22d8953df98d0ee51c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs:311-318 | datafusion/physical-plan/src/aggregates/aggregate_hash_table/common_ordered.rs:471-478 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/aggregate_hash_table/common_ordered.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"70e85be9b48c8d956a734b5cd7dbafb49e4c626c0306d0276db008a737e26866"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-plan/src/aggregates/hash_stream.rs:224-231 | datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs:151-158 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/hash_stream.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"a37d68b53061d2dead897ebe18b37952292f0452d1b2707b6d19683817e80465"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): datafusion/physical-plan/src/joins/hash_join/exec.rs:2315-2322 | datafusion/physical-plan/src/joins/nested_loop_join.rs:1023-1029 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/nested_loop_join.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 67 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":2315}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b535c857d9fa6b48af05d7bd2f8787abb53a6ae8e7e7650d62ebcc38178e558"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-plan/src/joins/nested_loop_join.rs:3231-3238 | datafusion/physical-plan/src/joins/nested_loop_join.rs:3351-3358 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3231}}}],"partialFingerprints":{"codehealthFindingId/v1":"589e26676990c2b6d2812d66c8ef7a04448f263623af8f37bae23c394f45821b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs:1277-1284 | datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs:1332-1339 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":1277}}}],"partialFingerprints":{"codehealthFindingId/v1":"0df3f36a59c1c35b06b585790ea02a591f8ee3d9ee1560b3ae8f95a6ffc2605f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-plan/src/repartition/range.rs:409-416 | datafusion/physical-plan/src/repartition/range.rs:465-472 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/repartition/range.rs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"624b0e4eb8d8e692df545d5603a3b8570cdc9202bfcd2cc86837387ac766edf2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-plan/src/sorts/partitioned_topk.rs:316-323 | datafusion/physical-plan/src/sorts/partitioned_topk.rs:334-341 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/partitioned_topk.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6297280a539c1c4dc5a7482dd49920d957b41bc3f9064d4bd0e66fce7a9226e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/sql/src/expr/mod.rs:1074-1081 | datafusion/sql/src/expr/mod.rs:1105-1112 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/mod.rs"},"region":{"startLine":1074}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f7dd55725f86abc8249d40470ceabb17b69ac6e0b9f67978d58b3585236cfa5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/substrait/src/logical_plan/producer/expr/literal.rs:289-296 | datafusion/substrait/src/logical_plan/producer/expr/literal.rs:297-304 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/expr/literal.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a779fa82398757ee46e8f65070a8c494a51cc7107218c9bf3058b6e5f592130"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/proto-common/gen/src/main.rs:31-38 | datafusion/proto-models/gen/src/main.rs:33-40 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/gen/src/main.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef9c119008d148b342a0f85a88535f309bb267863162333c6716fc4eba13c3e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 11): datafusion/physical-plan/src/aggregates/mod.rs:2211-2217 | datafusion/physical-plan/src/async_func.rs:179-185 | datafusion/physical-plan/src/buffer.rs:177-183 | datafusion/physical-plan/src/coalesce_batches.rs:189-195 | datafusion/physical-plan/src/coalesce_partitions.rs:166-172 | datafusion/physical-plan/src/filter.rs:600-606 | datafusion/physical-plan/src/limit.rs:185-191 | datafusion/physical-plan/src/limit.rs:466-472 | datafusion/physical-plan/src/sorts/sort_preserving_merge.rs:302-308 | datafusion/physical-plan/src/unnest.rs:245-251 | datafusion/physical-plan/src/windows/window_agg_exec.rs:270-276 \u2014 there are 11 copies across 10 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 11 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2211}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a61aa80bb6919c07def403eda1bb6181cd95230ba1f91252c10f07fca50d43a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 5): datafusion/spark/src/function/string/format_string.rs:1203-1209 | datafusion/spark/src/function/string/format_string.rs:1221-1227 | datafusion/spark/src/function/string/format_string.rs:1240-1246 | datafusion/spark/src/function/string/format_string.rs:1258-1264 | datafusion/spark/src/function/string/format_string.rs:1370-1376 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1203}}}],"partialFingerprints":{"codehealthFindingId/v1":"e61726ce3cd7d398cf8b6bcc8589dd88a85a7927eeb74d8940622564755493fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:216-222 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:296-302 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:389-395 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:483-489 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"889eccef8157e2c044ec6d4df9b74e176715a1a8914aef3f3a45b4c975f1043e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): datafusion/spark/src/function/string/format_string.rs:1276-1282 | datafusion/spark/src/function/string/format_string.rs:1295-1302 | datafusion/spark/src/function/string/format_string.rs:1315-1321 | datafusion/spark/src/function/string/format_string.rs:1335-1341 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1276}}}],"partialFingerprints":{"codehealthFindingId/v1":"52abbdd2a68c8ef2915372a3786bb57179e1edd587b8dabb61c59dd643a01c0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): datafusion/datasource-avro/src/source.rs:148-154 | datafusion/datasource-csv/src/source.rs:278-284 | datafusion/datasource-json/src/source.rs:221-227 \u2014 before extracting anything, compare \u0060datafusion/datasource-csv/src/source.rs\u0060 and \u0060datafusion/datasource-json/src/source.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 46 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-avro/src/source.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef7e127aa5fac1981ff2dbcb1fb9f750762a694cb9e8ff82560a2f969325888"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): datafusion/functions-nested/src/lib.rs:235-241 | datafusion/functions/src/lib.rs:183-189 | datafusion/spark/src/lib.rs:220-226 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/lib.rs"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee7fc97f68c11ad9c6ab566f40b206de7d4efa3e21ce3939be66a221c191f72f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): datafusion/functions-nested/src/arrays_zip.rs:185-191 | datafusion/functions-nested/src/arrays_zip.rs:197-203 | datafusion/functions-nested/src/arrays_zip.rs:208-214 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/arrays_zip.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccfc3661a70cde82d5b670b0c5ffdf9fbc4603a335f4d463b9731ad7ddca4070"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): datafusion/physical-plan/src/joins/asof_join.rs:561-567 | datafusion/physical-plan/src/joins/hash_join/exec.rs:1820-1826 | datafusion/physical-plan/src/joins/nested_loop_join.rs:681-687 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/asof_join.rs\u0060 and \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"54efbc088fcbf736ed86af5434381faead1f8f36134d1ef24da7d8343e9dc1ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): datafusion/physical-plan/src/topk/mod.rs:1480-1486 | datafusion/physical-plan/src/topk/mod.rs:1888-1894 | datafusion/physical-plan/src/topk/mod.rs:2381-2387 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1480}}}],"partialFingerprints":{"codehealthFindingId/v1":"0abe8b66bd0af6ef8acccbcec45d32e769e43915f155820cbbaa78db5c140e4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): datafusion/spark/src/function/datetime/date_part.rs:99-105 | datafusion/spark/src/function/datetime/date_trunc.rs:97-103 | datafusion/spark/src/function/datetime/trunc.rs:96-102 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/date_part.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"926f8899cea4da878c5ddea67b8a2bd5a02c312b3d4bd8e286b33691def7d28a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/common/src/dfschema.rs:729-735 | datafusion/common/src/dfschema.rs:798-804 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc4bbfd713efcc8ef9d12030f03513e983893ed8bd3dc484a5e43438092fefad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/common/src/stats.rs:904-910 | datafusion/common/src/stats.rs:932-938 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"523d154681a31ac63d5a969e4ef509ed3bb3fec1c0714dd55f72d12cdd48bd9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/datasource/src/display.rs:72-78 | datafusion/datasource/src/display.rs:81-87 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/display.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0728b4de522af7a5998b71b33e983fe8874782f96e4af37d521c80d14dbeb4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): datafusion/datasource/src/projection.rs:126-131 | datafusion/datasource/src/projection.rs:254-260 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/projection.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"93e6ccd04213eedd3d2247945271d5a72b37b072f4f0c2f61cb026eeb8cd84bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/expr-common/src/interval_arithmetic.rs:1000-1006 | datafusion/expr-common/src/interval_arithmetic.rs:1031-1037 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/interval_arithmetic.rs"},"region":{"startLine":1000}}}],"partialFingerprints":{"codehealthFindingId/v1":"2effb6538d30eceafe1b47b7ddc1402034a91763d8e53c9db4a6d04860879e9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/expr-common/src/casts.rs:498-504 | datafusion/expr-common/src/casts.rs:506-512 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/casts.rs"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f402307af993a41ccc900372be38265bb67e12238f4d64b31d9194eebbca2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:459-465 | datafusion/ffi/src/proto/physical_extension_codec.rs:400-406 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f4fe30ecf0252447487ea92d983c8dbb6498d9509a017f60b281b57aee75db6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions/src/unicode/substr.rs:290-296 | datafusion/functions/src/unicode/substrindex.rs:306-312 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/substr.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaf9341a5d90af26f2eb4b99afd5dbaf12ba2cccedae1a44b8b9597fd348f406"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20137 lines \u00D7 2): datafusion/functions-aggregate/src/average.rs:1242-1246 | datafusion/spark/src/function/aggregate/avg.rs:364-370 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/average.rs"},"region":{"startLine":1242}}}],"partialFingerprints":{"codehealthFindingId/v1":"202a2d9d56212894eb9c2211343becc8039269fbf78613352eba983c46d5aae5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions-aggregate/src/correlation.rs:190-196 | datafusion/functions-aggregate/src/correlation.rs:283-289 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/correlation.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"da8e2c895c502fb4baf20c8b450d40f749b60af8f4b7d9b0243a3f266b1c26a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions-aggregate-common/src/aggregate/count_distinct/groups.rs:115-121 | datafusion/functions-aggregate/src/count.rs:732-738 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/count_distinct/groups.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"69998923ef29329efb1b5f02e4fb53967eefb82665710ba74c5c939ce51b2ee5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions-aggregate/src/first_last.rs:1126-1132 | datafusion/functions-aggregate/src/first_last.rs:1520-1526 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4766a17d244bf01aa7a0aa2eb01e445bdc853af0b9a6b9965786cd26d7e3dee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions-nested/src/extract.rs:653-659 | datafusion/functions-nested/src/extract.rs:745-751 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/extract.rs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"f05068175ccef14cb99dd0a3bf9ae9741816e36b9256eb070349d675fc0839a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20137 lines \u00D7 2): datafusion/functions-nested/src/flatten.rs:133-139 | datafusion/functions-nested/src/flatten.rs:169-174 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/flatten.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"58703abe0ea91007f1debba92a6ee02c422265d0560b74c502a7f79551807786"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/optimizer/src/push_down_filter.rs:895-901 | datafusion/optimizer/src/push_down_filter.rs:993-999 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"146781ac6988d419298da34c6ba321f10314bbf6cbc12d086b730c4bc32e9ffc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs:164-170 | datafusion/physical-plan/src/aggregates/aggregate_hash_table/common_ordered.rs:211-217 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/aggregate_hash_table/common_ordered.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/aggregate_hash_table/common.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"78bbfd364e46b9e2e2e6452b84134c6c1bcfbf0fa2f68c1d32699ada8d7e038e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/analyze.rs:528-534 | datafusion/physical-plan/src/analyze.rs:541-547 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/analyze.rs"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a99fc671ca9dab9479c57f318e90a6a10bab4517b8601328da643f45ad2c806"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs:1572-1578 | datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs:1692-1698 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":1572}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad260a82c2a7b3ec7479f9bc14362cdf08d1e3158a3ad92d7ad705b2dedae140"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/joins/utils.rs:1126-1133 | datafusion/physical-plan/src/joins/utils.rs:1144-1150 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d37596a7bb7d458a01ac164a30eb3c29cc05a83469643ca7f3edfa14d1bdcd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/topk/mod.rs:1932-1938 | datafusion/physical-plan/src/topk/mod.rs:2489-2495 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1932}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d5290e6fe8855727742b9fda2a9530ebfe7f044fe0744eba7de5e366223d68b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs:392-398 | datafusion/physical-plan/src/windows/window_agg_exec.rs:191-197 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs\u0060 and \u0060datafusion/physical-plan/src/windows/window_agg_exec.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"b01f8f4a8dcc5570cd9f4c80ce098a09413c2da1503293d9714bab65de69096c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/spark/src/function/bitmap/bitmap_bit_position.rs:96-102 | datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs:96-102 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/bitmap/bitmap_bit_position.rs\u0060 and \u0060datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/bitmap/bitmap_bit_position.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc5bc4e5f0c6288e1c6ffb8406a453f2ef2c3cee95b9021d7ddd8aeaaa748ac8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/spark/src/function/bitmap/bitmap_bit_position.rs:104-110 | datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs:104-110 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/bitmap/bitmap_bit_position.rs\u0060 and \u0060datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/bitmap/bitmap_bit_position.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a8abe98a4d25c996cb50413010e71fe4ac3a5093908b02a8e2334b22aebdb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20137 lines \u00D7 2): datafusion/spark/src/function/datetime/make_dt_interval.rs:170-176 | datafusion/spark/src/function/datetime/make_interval.rs:190-194 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/make_dt_interval.rs\u0060 and \u0060datafusion/spark/src/function/datetime/make_interval.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/make_dt_interval.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"e932a408ff6db9e90bd39c6b720d3eb4b873e3312186da6fc560bc15ea177617"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/spark/src/function/string/format_string.rs:151-157 | datafusion/spark/src/function/string/format_string.rs:180-186 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"67a971e12912fd2f0c9d357120ae979cc06a3dc7baab99e911172105cc429a00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion-cli/src/object_storage/instrumented.rs:187-193 | datafusion-cli/src/object_storage/instrumented.rs:210-216 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/object_storage/instrumented.rs"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfe734c619dfa2d091405fbc34c182a2bf31142ebc2f35d08b4a3b4e686797fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): datafusion/functions/src/math/abs.rs:177-182 | datafusion/functions/src/math/monotonicity.rs:345-351 | datafusion/functions/src/math/monotonicity.rs:448-454 | datafusion/functions/src/math/monotonicity.rs:486-492 | datafusion/functions/src/math/monotonicity.rs:524-530 | datafusion/functions/src/math/monotonicity.rs:651-657 \u2014 there are 6 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/abs.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"25d82cba263591929284b19de557440ccf0f31b386130250922ed579823307e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): datafusion/functions-aggregate/src/covariance.rs:289-294 | datafusion/functions-aggregate/src/covariance.rs:314-319 | datafusion/functions-aggregate/src/regr.rs:606-612 | datafusion/functions-aggregate/src/regr.rs:636-642 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/covariance.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b82978d0039769d8f2f1caae65baf2ff9769845abafd1be9fd01f3408ccbe17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): datafusion/catalog/src/information_schema.rs:690-695 | datafusion/catalog/src/information_schema.rs:778-783 | datafusion/catalog/src/information_schema.rs:983-988 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":690}}}],"partialFingerprints":{"codehealthFindingId/v1":"27e6bcc5f543266f6e7432b2e036de2a8435eeb8dea8efac26b00f61625e1830"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): datafusion/functions/src/string/btrim.rs:36-41 | datafusion/functions/src/string/ltrim.rs:37-42 | datafusion/functions/src/string/rtrim.rs:37-42 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ltrim.rs\u0060 and \u0060datafusion/functions/src/string/rtrim.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/btrim.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"61a0c52738527d28b8951cea4c9bfca3e2e0061996b70fcd842fcf14ad927b1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): datafusion/physical-plan/src/aggregates/hash_stream.rs:224-229 | datafusion/physical-plan/src/aggregates/ordered_partial_stream.rs:151-156 | datafusion/physical-plan/src/aggregates/partial_reduce_stream.rs:189-194 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/hash_stream.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f14825551cab5f17d7bf7747c0c9f77fb060d221da845759c242cc4e57c1f22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): datafusion/spark/src/function/bitwise/bit_shift.rs:49-54 | datafusion/spark/src/function/bitwise/bit_shift.rs:72-77 | datafusion/spark/src/function/bitwise/bit_shift.rs:127-132 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/bitwise/bit_shift.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a4964e75afbfcfafb77e3f8a5c39a85cad3afe86bc69866dc6641d489e67d47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/catalog/src/information_schema.rs:1331-1336 | datafusion/catalog/src/information_schema.rs:1465-1470 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":1331}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ae86b71ebe16bb728873540f9bf3143df4c4907ee64f03397fd260a2eefbf66"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/common/src/stats.rs:107-112 | datafusion/common/src/stats.rs:124-129 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd95ecd09c440f6267e99d4202b4b09895a675402b34303ac73d8c98b5cac0d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/datasource/src/file_scan_config/mod.rs:764-770 | datafusion/datasource/src/file_scan_config/mod.rs:1614-1619 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_scan_config/mod.rs"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"093802854871583a3f10397ba3456f6d6885250484d88b11150ca83585deb60c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/execution/src/disk_manager.rs:120-125 | datafusion/execution/src/disk_manager.rs:142-147 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/execution/src/disk_manager.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"c93ebbbc690db5e654bafe9e5c7b44f5335884befc7f0b2e8c44abf3b6a4a7fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/expr-common/src/type_coercion/binary.rs:1867-1872 | datafusion/expr-common/src/type_coercion/binary.rs:1873-1878 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":1867}}}],"partialFingerprints":{"codehealthFindingId/v1":"2496ff845421c88cc7c9e03bb4143520ac439ebe7527faa95eb3c4ebc0cf89ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:71-76 | datafusion/functions/src/regex/regexpinstr.rs:83-88 \u2014 before extracting anything, compare \u0060datafusion/functions/src/regex/regexpcount.rs\u0060 and \u0060datafusion/functions/src/regex/regexpinstr.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ae4ea6b2e44e55a3637c995a218db3a8700ab90f7c74b3b582fcdbffccd74f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions/src/string/ends_with.rs:141-146 | datafusion/functions/src/string/starts_with.rs:137-142 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ends_with.rs\u0060 and \u0060datafusion/functions/src/string/starts_with.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/ends_with.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"63d331fae076b873d3e550b7efb19b917e8e939d628bfb82bbea089bed307690"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions/src/string/ends_with.rs:150-155 | datafusion/functions/src/string/starts_with.rs:146-151 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ends_with.rs\u0060 and \u0060datafusion/functions/src/string/starts_with.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/ends_with.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"d59a9676d348f365aa7d363c7f53fc25915115dde3a39e6b155e92b362caf5af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions/src/string/replace.rs:94-99 | datafusion/functions/src/string/replace.rs:116-121 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/replace.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"83041084361bb926060f5f5b47855c77fe6b5d829b779f79d3697ca984ac344d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions-aggregate/src/correlation.rs:431-436 | datafusion/functions-aggregate/src/correlation.rs:585-590 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/correlation.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"017c8319585dae3bc5b9d24559d88918dae342e32787ecd2a291c43c897d1260"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions-aggregate/src/correlation.rs:502-507 | datafusion/functions-aggregate/src/correlation.rs:550-555 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/correlation.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff006516c1397514c631cbd155baa565eda317d102f3a23eb29a251f8f15a1c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions-window/src/lib.rs:88-94 | datafusion/spark/src/lib.rs:237-242 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-window/src/lib.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"a61f2e5df76f666a5462198f900fa41ad43609e14448e334effa9a8319bcab03"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/optimizer/src/push_down_filter.rs:1033-1038 | datafusion/optimizer/src/push_down_filter.rs:1107-1112 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":1033}}}],"partialFingerprints":{"codehealthFindingId/v1":"88837581bcad042d1591637598a8a6fcaa505eccb27add4b06d32ef891ac79c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/physical-expr-common/src/metrics/value.rs:290-295 | datafusion/physical-expr-common/src/metrics/value.rs:302-307 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/metrics/value.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef32fafc10c5d3af2d7441721628dbed027d80c30d908010996ad61d1b69fb2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/row.rs:333-338 | datafusion/physical-plan/src/aggregates/group_values/row.rs:343-348 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/row.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f5501ba664f80ed845b445f7bdeeb4d5dc2307741170d1347e3229c6b5185f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/row.rs:359-364 | datafusion/physical-plan/src/aggregates/group_values/row.rs:370-375 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/row.rs"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce3d5814e53abc0ad2b7209aff1be271a1f07ae45daa40a3a4297c5a368ba7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs:508-514 | datafusion/physical-plan/src/aggregates/spill.rs:181-186 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"30739d38e8185ed73422118767b691b2ff8ec90a89436529438456294ca04a85"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/proto/src/physical_plan/from_proto.rs:302-309 | datafusion/proto/src/physical_plan/from_proto.rs:336-341 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/from_proto.rs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"befd6624e76a31f652920e895227f1594de93e676fb2519aa744db882a36ebff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/substrait/src/logical_plan/consumer/rel/cross_rel.rs:30-35 | datafusion/substrait/src/logical_plan/consumer/rel/join_rel.rs:37-42 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/rel/cross_rel.rs"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"71863295381985820ac27c1c9b54c92407a1934f5e79ffdb8a2b42aaa9f9de09"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 5): datafusion/functions-nested/src/array_avg.rs:104-108 | datafusion/functions-nested/src/array_normalize.rs:110-114 | datafusion/functions-nested/src/array_product.rs:108-112 | datafusion/functions-nested/src/array_scale.rs:121-129 | datafusion/functions-nested/src/array_sum.rs:104-108 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/array_avg.rs\u0060 and \u0060datafusion/functions-nested/src/array_normalize.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_avg.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"b22b2fa8f7ece952c8f90f1dc1ccd329e4ef59242ab9d707356daa9936087a62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): datafusion/core/src/execution/session_state.rs:2297-2301 | datafusion/core/src/execution/session_state.rs:2309-2313 | datafusion/core/src/execution/session_state.rs:2320-2324 | datafusion/core/src/execution/session_state.rs:2331-2335 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":2297}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a75e75272239d6c53103ceb1f404df17ff0b52f1bf21237e6a0965242ca589"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): datafusion/common/src/stats.rs:148-152 | datafusion/common/src/stats.rs:166-170 | datafusion/common/src/stats.rs:184-188 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"80a11948beaf068b4f44c7f2cc953959059e02bf657a2e23be518108d75e6814"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): datafusion/ffi/src/udaf/mod.rs:386-390 | datafusion/ffi/src/udf/mod.rs:299-303 | datafusion/ffi/src/udwf/mod.rs:228-232 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/udaf/mod.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8c1d892f6e583cec65414bc092509e3df0a6515942faff09e859c9313aaeec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20135 lines \u00D7 4): datafusion/functions/src/datetime/date_trunc.rs:760-764 | datafusion/functions/src/datetime/date_trunc.rs:765-769 | datafusion/functions/src/datetime/date_trunc.rs:771-775 | datafusion/functions/src/datetime/date_trunc.rs:776-779 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_trunc.rs"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a5ac9d3a6f2bf2fffb1f4bc745360aacecd8b0fb55a69257565cfd920c1f35"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): datafusion/functions-aggregate/src/variance.rs:622-626 | datafusion/functions-aggregate/src/variance.rs:656-660 | datafusion/functions-aggregate/src/variance.rs:682-686 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/variance.rs"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"155bdd520440528c56db56b9bda3f15124cade8354c8b4c06bc3f1d00e211d4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): datafusion/physical-plan/src/joins/asof_join.rs:745-749 | datafusion/physical-plan/src/joins/nested_loop_join.rs:1025-1029 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:873-877 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/asof_join.rs\u0060 and \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"1398e368c4a73b31a8123a4ba6f6e0b476238b637bd6098d9a8ac081792e029a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/common/src/dfschema.rs:704-708 | datafusion/common/src/dfschema.rs:773-777 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/dfschema.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4fd5c43b2ede73b25ea671b17c2c38a211b5ca576ec04349a28c36b09508e01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/datasource/src/memory.rs:744-748 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:873-877 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/memory.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"e490f75e4fc1f84d7ce1ef0a8d02b8e868e36fa8fdf1e487ea91e0165389c5f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/expr-common/src/type_coercion/binary.rs:1139-1143 | datafusion/expr-common/src/type_coercion/binary.rs:1147-1151 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":1139}}}],"partialFingerprints":{"codehealthFindingId/v1":"775cb309b3574e5f95d425219ff9213422a92905ae2647f8b897458eac48f369"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/expr-common/src/type_coercion/binary.rs:2055-2059 | datafusion/expr-common/src/type_coercion/binary.rs:2061-2065 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":2055}}}],"partialFingerprints":{"codehealthFindingId/v1":"179da6800ae05bc5e783f92598caf5b2e0e58a80f8722409a1d4c4abb4e4c38d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:452-456 | datafusion/ffi/src/proto/physical_extension_codec.rs:393-397 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b536e0c216a968932afa74a0d3f2c8a3f523bf05f896c095cc844fa55694054"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:470-474 | datafusion/ffi/src/proto/physical_extension_codec.rs:411-415 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a43295d3b473cb2a789a87d76938d3c409de5d9b3b6206e3576cb57450e7044"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:489-493 | datafusion/ffi/src/proto/physical_extension_codec.rs:430-434 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"318b14698a3172d75468cddd6150c55867c300f627326fae72686d1d58102b72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions/src/crypto/basic.rs:131-135 | datafusion/functions/src/crypto/basic.rs:162-166 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/crypto/basic.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de0839611924f4daa77d9bbfef01cef6127dd2b2e1ba63ec5d1a25ae65e423e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions/src/datetime/make_date.rs:123-127 | datafusion/functions/src/datetime/make_time.rs:124-128 \u2014 before extracting anything, compare \u0060datafusion/functions/src/datetime/make_date.rs\u0060 and \u0060datafusion/functions/src/datetime/make_time.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/make_date.rs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"efde5aad9d0dd7607342757f55f5996c591d0da08735cd5873d0620dceb60604"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions/src/encoding/inner.rs:470-475 | datafusion/functions/src/encoding/inner.rs:502-506 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/encoding/inner.rs"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"71cdab3d244f794501ce7283b25a860cf0f486d9eaa9516985362314716e23d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions/src/math/iszero.rs:103-107 | datafusion/functions/src/math/iszero.rs:113-117 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/iszero.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"786df002266984828579dc0578dac57e13083517793a02207649dbd2575409c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions-aggregate/src/average.rs:885-889 | datafusion/functions-aggregate/src/average.rs:959-963 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/average.rs"},"region":{"startLine":885}}}],"partialFingerprints":{"codehealthFindingId/v1":"70ee58d7ee4d01586f2db73fde681d7e3e679169073ccf296fb712210c2bedd6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:406-410 | datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:500-504 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"195fcae3b7265a1f48a00bb89b5636d9f26ce9bf34da802b75bb05171f801f57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions-nested/src/array_has.rs:849-853 | datafusion/functions-nested/src/array_has.rs:964-968 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_has.rs"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b3f8b5d9c70b56125d9fb6f7d1e92707fa7fb0e243eb9196cf16a921489ff21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions-nested/src/array_transform.rs:164-173 | datafusion/functions-nested/src/lambda_utils.rs:205-209 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_transform.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2da1b6fff9c060fd7609afdda88917351124d4241b9789f09053b20d2fe1710"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions-nested/src/set_ops.rs:133-137 | datafusion/functions-nested/src/set_ops.rs:216-220 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/set_ops.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c289354131267e7f897319a788c2e08671d685742003f3f5b90d842a47b457d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/optimizer/src/push_down_limit.rs:96-100 | datafusion/optimizer/src/push_down_limit.rs:105-109 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_limit.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"f40d6268d98a3843beeb7ea9e1aa126f1e1186a1bb279ce559e5aa255d9985e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/physical-expr-common/src/physical_expr.rs:281-285 | datafusion/physical-expr-common/src/physical_expr.rs:338-342 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/physical_expr.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb90bc59912e446d18f03a52d5a8604b8c816ed5da1a7df67c20bb76298153e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/physical-plan/src/display.rs:1185-1196 | datafusion/physical-plan/src/display.rs:1252-1256 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":1185}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6bb574b88ae18f320c1140d82406139004dcb56b971f8cbd043cd5c23b14660"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/physical-plan/src/joins/utils.rs:1344-1348 | datafusion/physical-plan/src/joins/utils.rs:1352-1356 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/utils.rs"},"region":{"startLine":1344}}}],"partialFingerprints":{"codehealthFindingId/v1":"4da191b623d1a3d256e85c719d7a0919d5a45645dac1ed6c381862171aa895c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/spark/src/function/string/format_string.rs:128-132 | datafusion/spark/src/function/string/format_string.rs:166-170 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"58e855d1859bdbcf4d6d5e6e8e961eaac5f65ea6ebb8db476e76d22285aa0e8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/substrait/src/logical_plan/producer/types.rs:275-279 | datafusion/substrait/src/logical_plan/producer/types.rs:286-290 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/types.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c16a22a99bde55b396a4acd2f4e2f23ca3983a669584368aa8ea741f1079df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion-cli/src/functions.rs:545-549 | datafusion-cli/src/functions.rs:670-674 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/functions.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"41290385c8a2f2b9497fc4df0dc05c6428be50ff6d84873f12afbdc56e83ee6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/catalog-listing/src/table.rs:798-804 | datafusion/catalog/src/cte_worktable.rs:159-165 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/table.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5a2a2b7a24bded148997d80707da2bfcde2cb2da3bf37209cf32033c5c29235"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/datasource-parquet/src/metadata.rs:1061-1067 | datafusion/datasource-parquet/src/reader.rs:361-367 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/metadata.rs"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7b9afc7cec76198dacf232462265ff3299acdcb02e0c1607daf01dab30465ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/expr/src/higher_order_function.rs:845-851 | datafusion/expr/src/udf.rs:888-894 \u2014 before extracting anything, compare \u0060datafusion/expr/src/higher_order_function.rs\u0060 and \u0060datafusion/expr/src/udf.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":845}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cfd793f9469fc0927ac85325231f8ae64c73e670dca9231f8b3ec0f9d8a2fbd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): datafusion/expr/src/higher_order_function.rs:1099-1106 | datafusion/expr/src/udaf.rs:1542-1550 | datafusion/expr/src/udf.rs:1102-1109 | datafusion/expr/src/udwf.rs:506-514 \u2014 before extracting anything, compare \u0060datafusion/expr/src/higher_order_function.rs\u0060 and \u0060datafusion/expr/src/udf.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 41 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":1099}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb1dbe6ec39c66b7c0105e33e827e3e0c29f18669bc1a1c842868bf711b25f7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/expr-common/src/type_coercion/binary.rs:403-408 | datafusion/physical-expr/src/expressions/binary.rs:252-257 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3f4164ee5e79d16ecb6bbde002571b62da8dea31748b714ffcf4207a33fbbd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): datafusion/ffi/src/catalog_provider.rs:185-193 | datafusion/ffi/src/catalog_provider_list.rs:150-158 | datafusion/ffi/src/schema_provider.rs:193-201 | datafusion/ffi/src/table_provider.rs:498-506 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/catalog_provider.rs\u0060 and \u0060datafusion/ffi/src/catalog_provider_list.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/catalog_provider.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"10aaae317ada9083ead3ff357796477cc81e8f4b8262f4aa6b5f2d716b9f723a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:197-204 | datafusion/ffi/src/proto/physical_extension_codec.rs:183-190 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc93c6be7fcaaf3b5e43f178d9ab923a93ceab414fc404fc5b408c74bf13617"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:224-230 | datafusion/ffi/src/proto/physical_extension_codec.rs:210-216 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbd9a8cfb3b79ec8695ea91c609776778ef7a7ec24bdcc6cfab0f57d51f47c02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:250-256 | datafusion/ffi/src/proto/physical_extension_codec.rs:236-242 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee048ee4259017d194a7bbc2ea339f22d2c06465112889866ed18ed11ca702b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/ffi/src/udf/mod.rs:505-511 | datafusion/ffi/src/udwf/mod.rs:323-329 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/udf/mod.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"251837f2149d07e6add00f078268f0cad9c4e672df47a300ab7c01b89c428a9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions/src/binaries.rs:99-104 | datafusion/functions/src/strings.rs:145-150 \u2014 before extracting anything, compare \u0060datafusion/functions/src/binaries.rs\u0060 and \u0060datafusion/functions/src/strings.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/binaries.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9850d37bdbc06d4f54e1db0f93b456b44cff1c1510aeb62ff5c5736520a6cac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions/src/binaries.rs:150-156 | datafusion/functions/src/strings.rs:198-204 \u2014 before extracting anything, compare \u0060datafusion/functions/src/binaries.rs\u0060 and \u0060datafusion/functions/src/strings.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/binaries.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d41b4eabce3bbd32a0dd0ef1f116e52194053f3db8a9d06fd2343f40d4e1692"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/functions/src/core/arrow_cast.rs:103-113 | datafusion/functions/src/core/arrow_try_cast.rs:75-85 \u2014 before extracting anything, compare \u0060datafusion/functions/src/core/arrow_cast.rs\u0060 and \u0060datafusion/functions/src/core/arrow_try_cast.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/arrow_cast.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"997a94341dbdcc4a45f8abf31c56a05c7ab1a5fbd095050c6e73701be83ffb93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/functions/src/math/cot.rs:56-70 | datafusion/functions/src/math/signum.rs:62-71 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/cot.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba4ccc9560b8c9c51a57f2f98b50f57c517a75ddda898b1dddbed0b693f3f825"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions/src/math/iszero.rs:66-72 | datafusion/functions/src/math/nans.rs:64-70 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/iszero.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eb502bf8e225cdfa2f6e8299a080247582f7f7156e265c84c05a6e12306fe52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 5): datafusion/functions/src/string/ascii.rs:66-76 | datafusion/functions/src/string/bit_length.rs:59-69 | datafusion/functions/src/string/lower.rs:57-67 | datafusion/functions/src/string/upper.rs:56-66 | datafusion/functions/src/unicode/initcap.rs:64-74 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/ascii.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca5b935c44cdd6511519cc4121d6ffe252524c53d64bac8cad69cabd22c60a8b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): datafusion/functions/src/string/contains.rs:59-69 | datafusion/functions/src/string/ends_with.rs:67-77 | datafusion/functions/src/string/levenshtein.rs:71-81 | datafusion/functions/src/string/starts_with.rs:63-73 \u2014 before extracting anything, compare \u0060datafusion/functions/src/string/ends_with.rs\u0060 and \u0060datafusion/functions/src/string/starts_with.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/contains.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bfb41d4d5bbe50e12c65611cc8b34a713cdc4682465d02a0a8982d8efa4d497"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions/src/string/lower.rs:83-89 | datafusion/functions/src/string/upper.rs:82-88 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/lower.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"1693339ce99ae108d15346cffa487d21dbb0b5f2852680a7d05e3f6139a93344"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/functions/src/string/split_part.rs:509-520 | datafusion/functions/src/unicode/substrindex.rs:583-594 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/split_part.rs"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"12d181b440f20d914367bc8f1980bd884418c3576f7a52b838b5d6a9bbac839f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): datafusion/functions-aggregate/src/array_agg.rs:113-118 | datafusion/spark/src/function/aggregate/collect.rs:78-83 | datafusion/spark/src/function/aggregate/collect.rs:139-144 | datafusion/spark/src/function/array/repeat.rs:61-66 \u2014 there are 4 copies across 3 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"17c9eabfe61b220d68196f3c314442077a8f23fbead57c2e5ee921c4e4b59fae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): datafusion/functions-aggregate/src/array_agg.rs:167-172 | datafusion/functions-aggregate/src/first_last.rs:363-368 | datafusion/functions-aggregate/src/first_last.rs:1272-1277 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/array_agg.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"4828627d0106a95ae3f87ffc5c2e15b829c221e3769da821005165b6e8760395"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs:127-132 | datafusion/functions-aggregate-common/src/utils.rs:261-265 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/count_distinct/native.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"e10535f6488e38abcc89adb3c649032ce07d1ea659679cb586dfbcf4dc1f2e94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions-nested/src/make_array.rs:122-128 | datafusion/spark/src/function/array/spark_array.rs:100-106 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/make_array.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"0277f31336ec97ff13d1dddad67bd61bddfe44ee4df38d26feea485954fb0eff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/physical-expr/src/higher_order_function.rs:289-293 | datafusion/physical-expr/src/scalar_function.rs:221-225 \u2014 before extracting anything, compare \u0060datafusion/physical-expr/src/higher_order_function.rs\u0060 and \u0060datafusion/physical-expr/src/scalar_function.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 42 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/higher_order_function.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccc26c2971c34ce1eb03f22633eb6c5d8f7bd291676f537950e3ed9fb343b5bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-expr/src/window/aggregate.rs:234-242 | datafusion/physical-expr/src/window/sliding_aggregate.rs:123-131 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/window/aggregate.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b4aa81a0509f0cd2164b83b7ec301619b1e9b235044a9d69538e8f3520a897f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/physical-expr-common/src/binary_map.rs:80-85 | datafusion/physical-expr-common/src/binary_view_map.rs:57-62 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/binary_map.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d494c58e138368e6f259347a49dcc9e920efbf2e7992f1c2be0f757292a8ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-expr-common/src/tree_node.rs:72-80 | datafusion/physical-plan/src/tree_node.rs:84-92 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/tree_node.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"da47a96e9050b29c269861a72ab16631529d1be0daf2716ec4c68dd192bbbb74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/physical-plan/src/aggregates/hash_stream.rs:682-696 | datafusion/physical-plan/src/aggregates/single_stream.rs:255-267 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/hash_stream.rs"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bfc3cacaa5329c872f3d1ce3103a48871894b120a8f062db5a79b041d7111fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/aggregates/mod.rs:2272-2280 | datafusion/physical-plan/src/joins/hash_join/exec.rs:1638-1646 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":2272}}}],"partialFingerprints":{"codehealthFindingId/v1":"e850f99176eb2f86418d6a24f1853ef1f510890f08dbf709bf584a2c460cb8fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): datafusion/physical-plan/src/buffer.rs:290-298 | datafusion/physical-plan/src/coalesce_batches.rs:278-286 | datafusion/physical-plan/src/coop.rs:348-356 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/buffer.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"22c9cfe1214b5299e93c7a55577be0892d5199453655ec9dd27b38e93e81d2ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): datafusion/physical-plan/src/coalesce_partitions.rs:349-356 | datafusion/physical-plan/src/filter.rs:888-895 | datafusion/physical-plan/src/projection.rs:628-635 | datafusion/physical-plan/src/sorts/sort_preserving_merge.rs:252-259 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 4 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/coalesce_partitions.rs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"e139d20b00308ea20719f68c21cbbd26ebe10c7a69d856bd2c405fb49e96b029"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/empty.rs:66-72 | datafusion/physical-plan/src/placeholder_row.rs:65-71 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/empty.rs\u0060 and \u0060datafusion/physical-plan/src/placeholder_row.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/empty.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"eba014bfc824632087b68ed2db91b970ecf8e40dd3dbd4159631f8fd7a6fded7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/empty.rs:83-91 | datafusion/physical-plan/src/placeholder_row.rs:101-109 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/empty.rs\u0060 and \u0060datafusion/physical-plan/src/placeholder_row.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/empty.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"61e52bc33f5a3f9f24e55454bbf8e9c8cfad50ff420b0f14f709f224c730358d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/joins/hash_join/partitioned_hash_eval.rs:451-457 | datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs:2126-2132 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/partitioned_hash_eval.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7de4125c44167551c638d10d7fca5909003376ee751a2e473a3593f802c25d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/sorts/partial_sort.rs:366-372 | datafusion/physical-plan/src/sorts/sort.rs:1350-1359 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/partial_sort.rs"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"261f814ad1580be2e8299de0c592a77ea89a9491eb08855f83a1195a030bc3f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs:268-275 | datafusion/physical-plan/src/windows/window_agg_exec.rs:117-124 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs\u0060 and \u0060datafusion/physical-plan/src/windows/window_agg_exec.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9ce8ff41d3057c024cbba5969bfed246856696bac20e63b7ff1760941fc3c9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/physical-plan/src/joins/proto.rs:68-74 | datafusion/proto-common/src/to_proto/mod.rs:828-834 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/proto.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f3ab88521e633f69431ae494bd85ece2b18a8abd357f4fff8ab32d852ca36e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/proto-common/src/from_proto/mod.rs:965-973 | datafusion/proto-common/src/to_proto/mod.rs:838-846 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":965}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f4a7d61045cf5413ea82bef71fd1c2f79c81d4a19012095763012750d6eaa08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/spark/src/function/bitmap/bitmap_bit_position.rs:75-81 | datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs:75-81 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/bitmap/bitmap_bit_position.rs\u0060 and \u0060datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/bitmap/bitmap_bit_position.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"c13bf5e7eb2d55ab7733fd51d1b4ae8d168360144b731dfaacc7c2afeb4a5c9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): datafusion/spark/src/function/datetime/add_months.rs:66-74 | datafusion/spark/src/function/datetime/date_add.rs:79-86 | datafusion/spark/src/function/datetime/date_sub.rs:72-79 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/add_months.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"b55a3e70ac1bf9470175963615978d09cae6927369afbe8dd31697879ef4f4b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): datafusion/spark/src/function/datetime/monthname.rs:55-66 | datafusion/spark/src/function/datetime/weekday.rs:50-61 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/monthname.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bc413c0fc0e4de86a4677526efe387fbac92f6acca4971fe8e217664c4cd61e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): datafusion/spark/src/function/hash/crc32.rs:49-60 | datafusion/spark/src/function/string/base64.rs:46-57 | datafusion/spark/src/function/string/base64.rs:119-130 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/hash/crc32.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"81a4cb7c864a7ad259f7657a55e58e2ba774878d08b24d6a840be02c8c8fb764"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/spark/src/function/math/rint.rs:69-77 | datafusion/spark/src/function/math/width_bucket.rs:134-141 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/rint.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"62879cf08586b5edada267445eb8d5a2f7d6291b65a438a202b00de0e9a93efa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/spark/src/function/string/is_valid_utf8.rs:49-64 | datafusion/spark/src/function/string/make_valid_utf8.rs:46-61 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/is_valid_utf8.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"97e33926db9d5e5b4b6380e9d623e9957d6b839dd2932054167f9cf64172dff0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/spark/src/function/string/quote.rs:68-73 | datafusion/spark/src/function/string/soundex.rs:58-63 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/quote.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6137c2de9abc8fc1ab1b87d3309580a99b3030d05519df2b3bd0391e30bc412"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/spark/src/function/url/url_decode.rs:150-160 | datafusion/spark/src/function/url/url_encode.rs:63-73 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/url/url_decode.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4034b28bb9b1336647fe256ef34ce1bc95818984dda09809d9e03413323bb2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/common/src/types/canonical_extensions/fixed_shape_tensor.rs:48-53 | datafusion/common/src/types/canonical_extensions/variable_shape_tensor.rs:46-51 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/types/canonical_extensions/fixed_shape_tensor.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fee0cbc123fe23f1017faebf0c422aa65225127e94063f2ec5ec74caa3cec95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/datasource-csv/src/file_format.rs:890-899 | datafusion/datasource-json/src/file_format.rs:529-539 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/file_format.rs"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"f50c5d4f3c5521f814867e833ae468b758b6f805b2ffcd45fdb9cba68179cd48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/ffi/src/catalog_provider.rs:301-308 | datafusion/ffi/src/schema_provider.rs:320-327 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/catalog_provider.rs\u0060 and \u0060datafusion/ffi/src/schema_provider.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/catalog_provider.rs"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a91fb09bc83a7354ac3bfb8e3d300fab57a470638774de03d982ed4efd0143f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/ffi/src/catalog_provider.rs:109-114 | datafusion/ffi/src/catalog_provider_list.rs:100-105 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/catalog_provider.rs\u0060 and \u0060datafusion/ffi/src/catalog_provider_list.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/catalog_provider.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a7dca1b715a06f5ca034aa1de5a3b98542a1c67a517f63d62f1e64595eea68c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): datafusion/ffi/src/execution/task_ctx.rs:153-159 | datafusion/ffi/src/execution/task_ctx_provider.rs:110-116 | datafusion/ffi/src/session/mod.rs:373-379 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/execution/task_ctx.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7855528f1d4e99ff2d829321d1cda0d61e31f18d66fd5cde218078b53e4e2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:272-281 | datafusion/ffi/src/proto/physical_extension_codec.rs:258-267 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f1c986d07f847fa2c6f675b513519cd5acb7e7576901411c0e54c73c31d375e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/ffi/src/proto/logical_extension_codec.rs:285-290 | datafusion/ffi/src/proto/physical_extension_codec.rs:271-276 \u2014 before extracting anything, compare \u0060datafusion/ffi/src/proto/logical_extension_codec.rs\u0060 and \u0060datafusion/ffi/src/proto/physical_extension_codec.rs\u0060 as WHOLE FILES: this scan already matched 15 separate duplicated blocks between them, totalling at least 118 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/proto/logical_extension_codec.rs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"b57e3793d8017dd69b8080055b327a185a075561e74fec0abaf19c614e86cbbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:190-196 | datafusion/functions/src/unicode/rpad.rs:190-196 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9c11f7e67bafc8e6c3640d2decbf4701ec474650d82c1f6ddb3d2c0c47fdc98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/functions-aggregate/src/average.rs:68-77 | datafusion/functions-aggregate/src/count.rs:77-86 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/average.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7b344841d11d2e5c71abd35e96a18a83c3c902f374af761a9a2e561cb3fc7e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/physical-expr-common/src/tree_node.rs:64-68 | datafusion/physical-plan/src/tree_node.rs:75-80 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/tree_node.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfa690a9ecf2a407934f5cdd66abceede4247a11721afc04d2601ff643d294d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/spark/src/function/bitmap/bitmap_count.rs:78-86 | datafusion/spark/src/function/bitwise/bit_count.rs:81-89 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/bitmap/bitmap_count.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6f3702f2280627b362e0720a27b4630acdb0dcd0fe3a3cce927c3135c7e8cbf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/spark/src/function/hash/crc32.rs:92-97 | datafusion/spark/src/function/hash/sha1.rs:101-106 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/hash/crc32.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"d890ead9bbcfbf677f598d6c3764c00a2bef16cd8d02823c710f3d6256be504d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/spark/src/function/map/map_from_arrays.rs:84-91 | datafusion/spark/src/function/map/map_from_entries.rs:104-111 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/map/map_from_arrays.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"81a9bcb7be9db319d24f100d4b7a671e58713f63cd1b631058f0c71178bba438"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/spark/src/function/string/ascii.rs:48-61 | datafusion/spark/src/function/string/quote.rs:47-56 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/ascii.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"20245be8e21ad13ccd9b0130525d43e50c87fc395dda4c1e64b2955a918f0e7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): datafusion/physical-plan/src/aggregates/hash_stream.rs:600-615 | datafusion/physical-plan/src/aggregates/single_stream.rs:202-217 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/hash_stream.rs"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3906ea44f7675d1537ff0916a21daca06cbe63944d4299871da71d607063776"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions/src/string/split_part.rs:260-274 | datafusion/functions/src/unicode/substrindex.rs:203-216 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/split_part.rs"},"region":{"startLine":260}}}],"partialFingerprints":{"codehealthFindingId/v1":"42aa977db904ac473dbefe4deb91a791a040756cca5f42a2a7645900afb4b8a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/physical-plan/src/empty.rs:217-230 | datafusion/physical-plan/src/placeholder_row.rs:217-230 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/empty.rs\u0060 and \u0060datafusion/physical-plan/src/placeholder_row.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/empty.rs"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"9618b28bb2f518acd45884e8e758524ab35bb238af6ef8e6ad6e411899b936f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): datafusion/functions-aggregate/src/first_last.rs:334-347 | datafusion/functions-aggregate/src/first_last.rs:1254-1267 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"8164168ae1d134e06ffb938551bb08bfeb3dfe16521dfae6e0d43fd0f27152a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions-aggregate/src/approx_percentile_cont.rs:175-188 | datafusion/functions-aggregate/src/percentile_cont.rs:277-289 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/approx_percentile_cont.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"319611f2aa176b78560e5a0206f4ec128896486c5db4ddba8c2494897ccc4b4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:156-168 | datafusion/functions/src/unicode/rpad.rs:156-168 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"acf87a1aecc098d1188aaeb1ad219fe49082cf39002c36f6d0a169d8d7cc2c9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-plan/src/joins/asof_join.rs:704-714 | datafusion/physical-plan/src/joins/hash_join/exec.rs:2281-2293 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/asof_join.rs\u0060 and \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 30 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e88abf8b7d6e37eb79bcb275af28e12814badfbc2a52e2451ce668ebbfdf76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): datafusion/functions/src/unicode/substr.rs:87-99 | datafusion/spark/src/function/string/substring.rs:77-89 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/substr.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"c992892d852e117d48ed5bf10544b9637eea6b20fac314fb8986180945fd940e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/sql/src/parser.rs:1083-1093 | datafusion/sql/src/parser.rs:1162-1174 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":1083}}}],"partialFingerprints":{"codehealthFindingId/v1":"1685cc067a8500c1a0f4085220443d270bc1eaf3e523e0a99e02eb351d792688"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:836-848 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:836-846 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/symmetric_hash_join.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 50 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/exec.rs"},"region":{"startLine":836}}}],"partialFingerprints":{"codehealthFindingId/v1":"1afe79bb973ed0d378b6b96f015dde090b90be09344296cfc3449f6c249c70a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): datafusion/expr-common/src/signature.rs:758-769 | datafusion/expr-common/src/signature.rs:772-783 | datafusion/expr-common/src/signature.rs:786-797 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/signature.rs"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"f44a8772b15b259418f484f53f0466f14bd4f3b8771ca2d6d0542c42882c09a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/joins/hash_join/exec.rs:1496-1507 | datafusion/physical-plan/src/joins/symmetric_hash_join.rs:375-383 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060 and \u0060datafusion/physical-plan/src/joins/symmetric_hash_join.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 38 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1496}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8466b4fccb02ced46620df5c805839ca90039ae871f514f025e11714fcc013"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/expr/src/udaf.rs:1276-1287 | datafusion/expr/src/udaf.rs:1465-1473 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/udaf.rs"},"region":{"startLine":1276}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e142dd98b1cd7dd1cc955e6745c2308328161e9b6d1544b228e9dca10702fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): datafusion/sql/src/parser.rs:1083-1094 | datafusion/sql/src/parser.rs:1470-1481 | datafusion/sql/src/parser.rs:1505-1516 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":1083}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e1c75c06e38aba1c082c279dc9fe10fc46c96465eb4427b0ef2763556f2bd6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/functions/src/math/cot.rs:115-126 | datafusion/functions/src/math/signum.rs:119-128 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/cot.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"e174d879c2943478f47cebb399952638e04755625fa380f0bd06abd0228978be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/proto/src/logical_plan/from_proto.rs:229-239 | datafusion/proto/src/logical_plan/from_proto.rs:540-550 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"62e1f3d9714bd5907a4d5457f4cf717998f894ed571d45730fc9c80d752edbe7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/functions/src/regex/regexpcount.rs:135-145 | datafusion/functions/src/regex/regexpinstr.rs:153-163 \u2014 before extracting anything, compare \u0060datafusion/functions/src/regex/regexpcount.rs\u0060 and \u0060datafusion/functions/src/regex/regexpinstr.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab80407c3fbd2592d23f63d6856e0613974d2ecaf9dadd81e38990e1ec669f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/catalog-listing/src/table.rs:981-991 | datafusion/catalog-listing/src/table.rs:1043-1053 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/table.rs"},"region":{"startLine":981}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba241fcf0712b7279a745f7cc728cc5dd10a52abb0fd1af73f6c4f7879e81061"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/core/src/execution/context/mod.rs:1384-1391 | datafusion/core/src/execution/context/mod.rs:1432-1442 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/context/mod.rs"},"region":{"startLine":1384}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc1f1b748225a1372b13ddb281fe1bf6d20e182facaf4f4030a6abc5cddaaddf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/expr/src/logical_plan/display.rs:649-656 | datafusion/expr/src/logical_plan/plan.rs:2410-2420 \u2014 before extracting anything, compare \u0060datafusion/expr/src/logical_plan/display.rs\u0060 and \u0060datafusion/expr/src/logical_plan/plan.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/display.rs"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"0667281c473201ce7c36bffd6f2a1d8a7d9e1cf883c80af76a13be4dcadfc38e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/expr/src/logical_plan/invariants.rs:229-234 | datafusion/expr/src/logical_plan/invariants.rs:239-249 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/invariants.rs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"19a9a74aa8c077c7ab3c34a7f7532848a8931d5ce6a77f2bf4a5aa7b8cb0f992"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 5): datafusion/functions-nested/src/array_avg.rs:98-102 | datafusion/functions-nested/src/array_normalize.rs:104-108 | datafusion/functions-nested/src/array_product.rs:102-106 | datafusion/functions-nested/src/array_scale.rs:106-116 | datafusion/functions-nested/src/array_sum.rs:98-102 \u2014 before extracting anything, compare \u0060datafusion/functions-nested/src/array_avg.rs\u0060 and \u0060datafusion/functions-nested/src/array_normalize.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_avg.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a4a5afdf8b44da80569b1af49d005ca4493734a3a12d633ad982249cb2e7ef2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): datafusion/functions-aggregate/src/correlation.rs:122-132 | datafusion/functions-aggregate/src/covariance.rs:109-119 | datafusion/functions-aggregate/src/covariance.rs:196-206 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/correlation.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a0aac252bbac79bf514d73726d24fcf50318afab417ad5ca215341e8803708e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 10): datafusion/spark/src/function/string/format_string.rs:1205-1213 | datafusion/spark/src/function/string/format_string.rs:1223-1232 | datafusion/spark/src/function/string/format_string.rs:1242-1251 | datafusion/spark/src/function/string/format_string.rs:1260-1268 | datafusion/spark/src/function/string/format_string.rs:1278-1287 | datafusion/spark/src/function/string/format_string.rs:1297-1307 | datafusion/spark/src/function/string/format_string.rs:1317-1326 | datafusion/spark/src/function/string/format_string.rs:1337-1346 | datafusion/spark/src/function/string/format_string.rs:1355-1363 | datafusion/spark/src/function/string/format_string.rs:1372-1380 \u2014 all 10 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1205}}}],"partialFingerprints":{"codehealthFindingId/v1":"25fff33899f755eee1b29a5d5dc6cb1a4fd1ea2affbe933ce063c8a0eef06804"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): datafusion/expr/src/sql.rs:54-64 | datafusion/expr/src/sql.rs:129-139 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/sql.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"299c180a7c8961ba221cfa02cd63338e461547b42cecae7e0bb33e2a48713930"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/physical-expr/src/expressions/in_list/primitive_filter.rs:316-323 | datafusion/physical-expr/src/expressions/in_list/primitive_filter.rs:436-446 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/in_list/primitive_filter.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"25eccd8a15a38265de44de6c5e21a4784badf054f7fcc6d2d11af5dac0baac8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): datafusion/expr-common/src/type_coercion/binary.rs:326-335 | datafusion/expr-common/src/type_coercion/binary.rs:352-361 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb108209aae993361d978098c0fa2e11f9840ddba138dcf1d9b38df496f475f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/core/src/physical_planner.rs:798-805 | datafusion/core/src/physical_planner.rs:832-841 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe92dde6f657f9e3d2fdd8ef08bac619f1198264f232296c53a8861a8bd2d2ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): datafusion/spark/src/function/datetime/make_dt_interval.rs:149-158 | datafusion/spark/src/function/datetime/make_interval.rs:152-161 | datafusion/spark/src/function/datetime/make_interval.rs:168-177 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/make_dt_interval.rs\u0060 and \u0060datafusion/spark/src/function/datetime/make_interval.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/make_dt_interval.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"abe5ac72d6de7410535281287896e7b96e97cb4b0c79ab1b4a27f4ac536550ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): datafusion/physical-plan/src/topk/mod.rs:360-369 | datafusion/physical-plan/src/topk/mod.rs:1334-1340 | datafusion/physical-plan/src/topk/mod.rs:1649-1656 | datafusion/physical-plan/src/topk/mod.rs:2144-2151 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e1497531043cc7a9632ce099c21eb6541eef1b03f855132f0c91383da823556"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/optimizer/src/scalar_subquery_to_join.rs:118-127 | datafusion/optimizer/src/scalar_subquery_to_join.rs:188-196 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/scalar_subquery_to_join.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3148d4893fc69898bbaa842576b3c5cad94a3fa21316ce6f24347021c22a7ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/spark/src/function/math/negative.rs:408-416 | datafusion/spark/src/function/math/negative.rs:435-443 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/negative.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"029f15f1d0782ffee8c8f8f6bf85e6d3fa01457f3a76375d7450424bef0376e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/functions/src/unicode/lpad.rs:303-311 | datafusion/functions/src/unicode/rpad.rs:302-310 \u2014 before extracting anything, compare \u0060datafusion/functions/src/unicode/lpad.rs\u0060 and \u0060datafusion/functions/src/unicode/rpad.rs\u0060 as WHOLE FILES: this scan already matched 14 separate duplicated blocks between them, totalling at least 229 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/lpad.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"26eed7ba8b0d98a49c2bae2993b5088a347b40b8292294e020774474d741660c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/joins/asof_join.rs:695-703 | datafusion/physical-plan/src/joins/sort_merge_join/exec.rs:827-835 \u2014 before extracting anything, compare \u0060datafusion/physical-plan/src/joins/asof_join.rs\u0060 and \u0060datafusion/physical-plan/src/joins/sort_merge_join/exec.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/asof_join.rs"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd614b9078a1b59e938c4620eb589e5baabfd501f928623a8bd5106a9d1a0aeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/datasource-csv/src/file_format.rs:410-418 | datafusion/datasource-parquet/src/file_format.rs:393-401 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/file_format.rs"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"afe129a164703f36f21af31cb30dfc851ccf47d4b4db58cd4a7c57c13e64a924"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/spark/src/function/math/negative.rs:249-257 | datafusion/spark/src/function/math/negative.rs:282-289 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/math/negative.rs"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5b27ffd7e0f78448a4e5bbd75edc44a39676d36e8d1293a0140160b942ab467"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/substrait/src/logical_plan/consumer/expr/literal.rs:456-464 | datafusion/substrait/src/logical_plan/consumer/expr/literal.rs:554-562 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/expr/literal.rs"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"63a0aaa0879235d90500e2825379e7d71bb753cd2f98e3fb7266f7617b1edd77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/common/src/config.rs:3535-3542 | datafusion/common/src/config.rs:3697-3705 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/config.rs"},"region":{"startLine":3535}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4e5ebd0c7a3bb195e5c7f5e5afb3d6c6c371b4c527ffa30057554957dea530b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/catalog/src/information_schema.rs:273-280 | datafusion/catalog/src/information_schema.rs:293-300 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb7876893033481804bfb097768bcb65d443d4d3ddcdf78b43a0e2388580e0e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions-nested/src/string.rs:525-531 | datafusion/functions-nested/src/string.rs:537-544 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"b87bc2cf8989cbe606f29fd6f0d6f0f5dbe27cc94ffc28f039395a514f3cc699"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): datafusion/spark/src/function/datetime/make_dt_interval.rs:160-167 | datafusion/spark/src/function/datetime/make_interval.rs:179-186 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/make_dt_interval.rs\u0060 and \u0060datafusion/spark/src/function/datetime/make_interval.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/make_dt_interval.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"05788a31a741ce7de2a02522eae21e11a69dcd743e0c1dc906729e897a755568"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/functions-aggregate/src/first_last.rs:976-983 | datafusion/functions-aggregate/src/first_last.rs:1371-1377 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":976}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f5a6f0ecd73f98b6be85559035e8affff52d1f6d0097c00da58e25e85110692"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): datafusion/spark/src/function/datetime/from_utc_timestamp.rs:174-180 | datafusion/spark/src/function/datetime/to_utc_timestamp.rs:176-182 \u2014 before extracting anything, compare \u0060datafusion/spark/src/function/datetime/from_utc_timestamp.rs\u0060 and \u0060datafusion/spark/src/function/datetime/to_utc_timestamp.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 70 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/from_utc_timestamp.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"f599bc5c0b5910f9a97587cf368c19856a546b3f4f8eb84ab3edaf94202d0adf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions/src/datetime/to_timestamp.rs:461-467 | datafusion/functions/src/datetime/to_timestamp.rs:478-483 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/to_timestamp.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2444d56a2bc2009f27d6ab3a1f6de3723cff6b50a4d97bc74c04437f1136169"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions-nested/src/map_entries.rs:121-127 | datafusion/functions-nested/src/map_keys.rs:111-116 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/map_entries.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6d0ae7b6d62a91fc3068135a47b3af0b2de5d5b4544a0b07d8628698373e132"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/functions/src/math/round.rs:742-747 | datafusion/functions/src/math/round.rs:752-757 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/round.rs"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"077413345acd4fec5e0da9481571ef309eac2f33a01ab22ec92ee9dfa4a5fae3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): datafusion/substrait/src/logical_plan/consumer/expr/literal.rs:537-542 | datafusion/substrait/src/logical_plan/consumer/expr/literal.rs:552-557 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/expr/literal.rs"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"20105a774032a429318a5c38c5c68587781ac6296bdf3774cd50976c91bf6c30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions-nested/src/array_add.rs:120-124 | datafusion/functions-nested/src/array_subtract.rs:119-123 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_add.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"1180b474523b2815d1f82c8103db079accabaaca1f1aec123b781d628f083c1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/common/src/stats.rs:241-245 | datafusion/common/src/stats.rs:303-307 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"d09f80dbc3b9d4418ead515ef7112c1f642ea264f40c29d700e83521ef4e7316"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/expr/src/expr_schema.rs:626-630 | datafusion/expr/src/expr_schema.rs:634-638 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db5219b98cbd552a46573f3a9abcea8fe1f44523d7d19768bdeaa97c4eccadd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/expr-common/src/type_coercion/binary.rs:2067-2071 | datafusion/expr-common/src/type_coercion/binary.rs:2073-2077 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":2067}}}],"partialFingerprints":{"codehealthFindingId/v1":"02de482443fed2f9701b89338f16268f034a6920123a02555b306c393a616947"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/functions/src/string/common.rs:69-73 | datafusion/functions/src/string/common.rs:111-115 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/common.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7403b5099e2b8fab8aa7a08dddc83ab3fc77da569fc6b58ca9cc6816fe391eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/physical-expr/src/simplifier/not.rs:103-107 | datafusion/physical-expr/src/simplifier/not.rs:113-117 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/simplifier/not.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"71ae706f0a6687953b7c21f92b42036d1683b1f79ddfd0e8b245c159b2749f73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs:1299-1303 | datafusion/physical-plan/src/aggregates/group_values/row.rs:290-294 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":1299}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc13e81b11c49e5ab081110227cbf6910b45d913e3f929bbec0c1b7dd0c63aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): dev/update_datafusion_versions.py:70-75 | dev/update_datafusion_versions.py:105-110 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dev/update_datafusion_versions.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"91390274072257e4edf20825b1e4d57e3a6d210095e85d1c1aa1d68d4d518244"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): datafusion/core/src/test_util/mod.rs:94-113 | datafusion/physical-plan/src/test.rs:383-402 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/test_util/mod.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7655d30d0c9c70405fc47dd73e1900f15121de9c643f8684684bf217cf535cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): test-utils/src/array_gen/string.rs:45-64 | test-utils/src/array_gen/string.rs:69-88 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test-utils/src/array_gen/string.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d46924d595e765b0d5a454b73cb1f53005341a95fc5af635210426c43210cfd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/physical-plan/src/test.rs:412-420 | datafusion/physical-plan/src/test.rs:433-441 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/test.rs"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdab40b71f813327f0761fd9279e4dbed6574f0fffa5d563eeff11cbf545a31d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): datafusion/sqllogictest/src/test_context/range_partitioning.rs:139-150 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:164-172 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/test_context/range_partitioning.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"773846b2211bf11fa2c1596b716e3a6acb54619f6ac4c757083bbfab9d1c30a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): datafusion/sqllogictest/src/test_context/range_partitioning.rs:118-124 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:141-150 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:166-172 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/test_context/range_partitioning.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0dcb6a5cb99201ca5d9c560a0a8efab24a8002e7065b49ce881e0467d86a258"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): datafusion/sqllogictest/src/test_context/range_partitioning.rs:85-90 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:125-130 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:173-178 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/test_context/range_partitioning.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d256546a93c1bf18bdf5a3abe10a5cd5191ea097cc8bf4a278548963500d901"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): test-utils/src/array_gen/binary.rs:44-49 | test-utils/src/array_gen/binary.rs:67-72 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test-utils/src/array_gen/binary.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"c370557c6c95952f93ebffc7fa3e5557eb79d96d9c97e2b2657af349ba1910be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): datafusion/sqllogictest/src/test_context/range_partitioning.rs:80-84 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:118-124 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:141-150 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:166-172 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/test_context/range_partitioning.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"d55bec78dba5cb1b1ff44cb89af94398d4d2105663b81ca35ac7859c11eab015"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): datafusion/sqllogictest/src/test_context/range_partitioning.rs:126-134 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:151-159 | datafusion/sqllogictest/src/test_context/range_partitioning.rs:174-182 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/test_context/range_partitioning.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"90ece76f9668ffc1a4f10eccbb834771955746306bb29c0e2f89600a914631ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): test-utils/src/tpcds.rs:619-625 | test-utils/src/tpch.rs:140-146 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test-utils/src/tpcds.rs"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f31b105b02a7c5feb6b23bf8960229ffedd7514a5a5891cea5792847cced9ad"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion: datafusion has instability 0.84 with 5 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"111443f56979f927553ff43960f83544c1860f7d1c50982250bca2678485279c"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-catalog-listing: datafusion-catalog-listing has instability 0.82 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ff9974953b775403086218af05e7e7b10081d32c5b2182040267a0ae73401049"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-datasource-arrow: datafusion-datasource-arrow has instability 0.82 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f05a7253600b3b6935058f8df89bb7d690b6658c3e235cda420a99094655d2b7"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-datasource-avro: datafusion-datasource-avro has instability 0.83 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"93cc2680092d0041a33f05729392017061e2d7f609c397eddd64d9a2ac0210e0"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-datasource-csv: datafusion-datasource-csv has instability 0.82 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3d33a5ab0d2d0778ac0fbf33c74475ff34fc4de90c7bda1901549c9717fd2007"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-datasource-json: datafusion-datasource-json has instability 0.82 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2055751e83eb65541b4e584077790fa47a74c134980134df5a1028168665a534"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-datasource-parquet: datafusion-datasource-parquet has instability 0.88 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a75629efb33162acd715e691198354172b210d083a0ac897612058b249f09080"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-physical-optimizer: datafusion-physical-optimizer has instability 0.82 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"961a7288dc5ecda7ccf33ef22c592090421c0ee83d12557202772b004aec62b3"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-proto: datafusion-proto has instability 0.94 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0f7b893f0957fb2698b0a4d4ac0dc23e0a670b543b659162c29afc4f8d597592"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project datafusion-spark: datafusion-spark has instability 0.82 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9819d264d4fe655a819a7a23a5de75bf25e3b5dfff3cfd0f9f632e7a90389ae8"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: datafusion-doc: datafusion-doc: abstractness 0.00, instability 0.00, distance 1.00 \u2014 zone of pain \u2014 concrete and depended on by 6 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"23dc982be04aacc601296c27a174ee68120e3152a6d51085e6fb785dc1e88a62"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: datafusion-common-runtime: datafusion-common-runtime: abstractness 0.25, instability 0.00, distance 0.75 \u2014 the shape a shared-kernel / building-block library has BY DESIGN \u2014 concrete and widely depended-on is what makes it useful, and this dimension does not penalise it (the distance is reported for completeness, not as a defect). Worth a look only if it has grown past one coherent kernel into an everything-bucket."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"55bbd291b3dd49492ca3a4e3272c853e3aba958c9110f2e7fb611c9b523804df"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: datafusion-physical-expr-common: datafusion-physical-expr-common: abstractness 0.15, instability 0.11, distance 0.74 \u2014 the shape a shared-kernel / building-block library has BY DESIGN \u2014 concrete and widely depended-on is what makes it useful, and this dimension does not penalise it (the distance is reported for completeness, not as a defect). Worth a look only if it has grown past one coherent kernel into an everything-bucket."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6cf6a2aafcadf0c2ebf495c754a7b34ccf27c5616355029c8c0cc723a2706f1d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/core/src/physical_planner.rs: datafusion/core/src/physical_planner.rs changed 28 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 121 in DefaultPhysicalPlanner::map_logical_node_to_physical at line 574. 9 of those changes were fix/bug commits, and the other 19 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/core/src/physical_planner.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"b353c60b6b6b04252d0728feae74a8f7a1ee1de8d8c8b09f5c81f0f4c93fec99"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sql/src/statement.rs: datafusion/sql/src/statement.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 215 in SqlToRel::sql_statement_to_plan_with_context_impl at line 267. 4 of those changes were fix/bug commits, and the other 9 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sql/src/statement.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9760c685351fb84c590e574971da51bc0a375c01f606ead09efe304f6b1677f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/proto-models/src/generated/pbjson.rs: datafusion/proto-models/src/generated/pbjson.rs changed 23 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 121 in PhysicalPlanNode::deserialize at line 21503. 13 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/proto-models/src/generated/pbjson.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-models/src/generated/pbjson.rs"},"region":{"startLine":21503}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7b29abc96f33832b159fddb743fc839230b0549c344e8b35769db754781b1aa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs: datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 194 in Simplifier::f_up at line 835. 10 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dd974ca04f5f23eb5a6032e2c6e9aff76cf083336cf97fd31099cf2d895f23e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/proto/src/physical_plan/mod.rs: datafusion/proto/src/physical_plan/mod.rs changed 43 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 40 in PhysicalPlanNodeExt::try_into_physical_plan_with_context at line 1165. 5 of those changes were fix/bug commits, and the other 38 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/proto/src/physical_plan/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/mod.rs"},"region":{"startLine":1165}}}],"partialFingerprints":{"codehealthFindingId/v1":"b36c961bebea55314763699ae2118dee19c42a9a44267165491f89cb0832c43d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sql/src/unparser/plan.rs: datafusion/sql/src/unparser/plan.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 124 in Unparser::select_to_sql_recursively at line 837. 5 of those changes were fix/bug commits, and the other 7 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sql/src/unparser/plan.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/plan.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"5233005770810a20e8df10c44cc6c4db3a0b35dcce72b3d40921379203022ea9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/joins/hash_join/exec.rs: datafusion/physical-plan/src/joins/hash_join/exec.rs changed 42 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 29 in datafusion_physical_plan::joins::hash_join::exec::collect_left_input at line 3027. 16 of those changes were fix/bug commits, and the other 26 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/joins/hash_join/exec.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":3027}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c4d1ce624ed26578ffcaaeed72513ea3dab0b389fb67e6c2cc64bfbf7590c77"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/expr/src/logical_plan/plan.rs: datafusion/expr/src/logical_plan/plan.rs changed 17 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 55 in LogicalPlan::display at line 2068. 6 of those changes were fix/bug commits, and the other 11 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/expr/src/logical_plan/plan.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":2068}}}],"partialFingerprints":{"codehealthFindingId/v1":"336523ffa736ee085c1430c82a81dd7228bb13fbe33eca79a1144a285356b8ba"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/aggregates/mod.rs: datafusion/physical-plan/src/aggregates/mod.rs changed 60 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in AggregateExec::execute_typed at line 1327. 16 of those changes were fix/bug commits, and the other 44 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/aggregates/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1327}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea6a62eaf853b0ec1e439787cdb3f85d0c5cf522035cdeb88d4bfaaf4d0c218"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/proto/src/logical_plan/mod.rs: datafusion/proto/src/logical_plan/mod.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 75 in LogicalPlanNode::try_into_logical_plan at line 499. 3 of those changes were fix/bug commits, and the other 9 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/proto/src/logical_plan/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/mod.rs"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fad40d637912afa3a4ca0e59726e7a4b851d3f56e6028d232485fa57fcbd25c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs: datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 60 in datafusion_physical_plan::aggregates::group_values::multi_group_by::make_group_column at line 959. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs"},"region":{"startLine":959}}}],"partialFingerprints":{"codehealthFindingId/v1":"8117a1124de744d278e5a993c1706a543791e46e979d0d132632ff3b55ded2ac"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sql/src/unparser/expr.rs: datafusion/sql/src/unparser/expr.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 61 in Unparser::expr_to_sql_inner at line 156. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sql/src/unparser/expr.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"94901961d6b6f5ed4793800f54e7a501dd64237cf1d6652bed3b8d329fbbba4b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/push_down_filter.rs: datafusion/optimizer/src/push_down_filter.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 63 in PushDownFilter::rewrite at line 799. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/push_down_filter.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":799}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c28bd5c4570a460048df4d4475874278c0d9a42e69835469a4405ad16aa69c7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs: datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 42 in datafusion_physical_optimizer::ensure_requirements::enforce_distribution::ensure_distribution_with_stats at line 1363. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_distribution.rs"},"region":{"startLine":1363}}}],"partialFingerprints":{"codehealthFindingId/v1":"d947b80468b7c13c850440b81fe7266f7588f5cf37245fd7a15ec9d6438c3446"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/expr/src/type_coercion/functions.rs: datafusion/expr/src/type_coercion/functions.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 66 in datafusion_expr::type_coercion::functions::get_valid_types at line 580. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/expr/src/type_coercion/functions.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e8fb431d54600d6f70dc56ee3ee118a886b313c0167685510a0fd593d3cac98"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/joins/nested_loop_join.rs: datafusion/physical-plan/src/joins/nested_loop_join.rs changed 24 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in datafusion_physical_plan::joins::nested_loop_join::build_unmatched_batch at line 3879. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/joins/nested_loop_join.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3879}}}],"partialFingerprints":{"codehealthFindingId/v1":"28a2871202096c9d8e1003b86d546639822ee72b181d88883d24b643cabc6840"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/proto/src/physical_plan/from_proto.rs: datafusion/proto/src/physical_plan/from_proto.rs changed 16 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in datafusion_proto::physical_plan::from_proto::parse_physical_expr_with_converter at line 242. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/proto/src/physical_plan/from_proto.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/from_proto.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"f24177afea0e23ef59a1d73bbe13e81fc144860c9fd601bb348ccceec65cdd11"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/analyzer/type_coercion.rs: datafusion/optimizer/src/analyzer/type_coercion.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 37 in TypeCoercionRewriter::f_up at line 583. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/analyzer/type_coercion.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"be412b1901a562b2572f0b3ff2bb6f8ec1c9cec0d502bd4bbf780edd4a4ec927"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions-aggregate/src/approx_distinct.rs: datafusion/functions-aggregate/src/approx_distinct.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 30 in ApproxDistinct::accumulator at line 752. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-aggregate/src/approx_distinct.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/approx_distinct.rs"},"region":{"startLine":752}}}],"partialFingerprints":{"codehealthFindingId/v1":"1175ba7814e302dd78b7f6e5f583736cb8516d24dc1fd10f9f96463839c191a0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/expr/src/expr.rs: datafusion/expr/src/expr.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 55 in SchemaDisplay::fmt at line 3006. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/expr/src/expr.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3006}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb203feb3790079377a39eba11209db81056ac4048c4363cae2f003901ef1234"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sql/src/expr/function.rs: datafusion/sql/src/expr/function.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 77 in SqlToRel::sql_function_to_expr at line 228. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sql/src/expr/function.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/function.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f8d9165cc0e493f6dc59c2eee96501498379923325e87f91a01923eea1491ef"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-expr/src/planner.rs: datafusion/physical-expr/src/planner.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 48 in datafusion_physical_expr::planner::create_physical_expr at line 133. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-expr/src/planner.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/planner.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"54d274f559f7f52a31eecfda6b082043eb498d5c94943429d4b9f862d1808776"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/expr/src/expr_schema.rs: datafusion/expr/src/expr_schema.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 38 in Expr::nullable at line 294. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/expr/src/expr_schema.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7cb96ad0aa1e49c1998308ba530f6b06beb661534ab546373040ae3ba2a23e8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-expr/src/expressions/binary.rs: datafusion/physical-expr/src/expressions/binary.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in BinaryExpr::evaluate at line 559. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-expr/src/expressions/binary.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"c141f10e94b1ffed302b5ab0c16591683343fcb2465fe524b9f70809b9e6b0e6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/core/src/execution/session_state.rs: datafusion/core/src/execution/session_state.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 29 in SessionStateBuilder::build at line 1682. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/core/src/execution/session_state.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/session_state.rs"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"353fe2c93516bba9d9a0c3cf58b5228784ee502ebd2afe8693b5d0160ec8c8d8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/proto/src/logical_plan/to_proto.rs: datafusion/proto/src/logical_plan/to_proto.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 45 in datafusion_proto::logical_plan::to_proto::serialize_expr at line 53. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/proto/src/logical_plan/to_proto.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/to_proto.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"86c4fa55c0c408403348a6baa381828ccac7487a6569b290e7865f24590b1341"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/proto/src/logical_plan/from_proto.rs: datafusion/proto/src/logical_plan/from_proto.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 48 in datafusion_proto::logical_plan::from_proto::parse_expr at line 170. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/proto/src/logical_plan/from_proto.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"d206b6802d5b79b3e0eafb41c1ec91d8ed3d25cc24a1cdbc48e57d9fb30ae41d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/pruning/src/pruning_predicate.rs: datafusion/pruning/src/pruning_predicate.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 31 in datafusion_pruning::pruning_predicate::build_predicate_expression at line 1732. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/pruning/src/pruning_predicate.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":1732}}}],"partialFingerprints":{"codehealthFindingId/v1":"2166e1e482b37025960a45a145f468f078fd4598e6c26086261db2d5300e05be"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs: datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 29 in datafusion_physical_optimizer::ensure_requirements::enforce_sorting::sort_pushdown::pushdown_requirement_to_children at line 454. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b97e5684c4d3f05018413fa560c70ace0e018f7ea8174e58ce719801614b294"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions/src/datetime/date_trunc.rs: datafusion/functions/src/datetime/date_trunc.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in DateTruncFunc::invoke_with_args at line 238. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/datetime/date_trunc.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_trunc.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee3b450a687e6efd0e3bdbbd173e5f124de2f5af37860891c8591e2e24e7e18b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions-aggregate/src/first_last.rs: datafusion/functions-aggregate/src/first_last.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in datafusion_functions_aggregate::first_last::create_groups_accumulator at line 106. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-aggregate/src/first_last.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"857d6cdc119c6d59bb05460e9e48577e6452329b859d8667fb929bae44a62998"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sql/src/planner.rs: datafusion/sql/src/planner.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 40 in SqlToRel::convert_simple_data_type at line 709. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sql/src/planner.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/planner.rs"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b463ef279e91c7b4c8e1f6ecc1a723fcf2bb7efd2e17bb2b5096fefcf7a9ee1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sqllogictest/src/test_context.rs: datafusion/sqllogictest/src/test_context.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in TestContext::try_new_for_test_file at line 109. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sqllogictest/src/test_context.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/test_context.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"f61e5fbf99ce627fcb825ff87bb99de6d6273483a8c2e1b0d441bbd3541a620b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions/src/datetime/date_bin.rs: datafusion/functions/src/datetime/date_bin.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 37 in datafusion_functions::datetime::date_bin::date_bin_impl at line 517. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/datetime/date_bin.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_bin.rs"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fd1360c3e939e5d752b873af91a81ccd295eaf0dd68d52133aba1ecc7c1fd61"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/core/src/execution/context/mod.rs: datafusion/core/src/execution/context/mod.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in SessionContext::execute_logical_plan at line 700. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/core/src/execution/context/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/context/mod.rs"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"db26ec975ff573e89fd1838948a8eea414ff4b9e0f42d28bdb8a66aafc625b6d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/joins/hash_join/stream.rs: datafusion/physical-plan/src/joins/hash_join/stream.rs changed 12 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in HashJoinStream::process_probe_batch at line 822. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/joins/hash_join/stream.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/stream.rs"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"17a9302db5c36fad790e6539b097e8a6747a1339ce51979d5fa923ed524cce44"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/datasource-parquet/src/page_filter.rs: datafusion/datasource-parquet/src/page_filter.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in PagePruningAccessPlanFilter::prune_plan_with_page_index_and_metrics at line 224. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/datasource-parquet/src/page_filter.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/page_filter.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a357237bf2a6d6ca5bd1adc40c524911500ed95b8957902f81904ca8824831a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/datasource-parquet/src/push_decoder.rs: datafusion/datasource-parquet/src/push_decoder.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in PushDecoderStreamState::transition at line 438. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/datasource-parquet/src/push_decoder.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/push_decoder.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"5caeff7e9cc465b896f16e4a6700651b535bb36f508d6f6948633ebc08601bd6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/expr/src/logical_plan/display.rs: datafusion/expr/src/logical_plan/display.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 45 in PgJsonVisitor::to_json_value at line 303. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/expr/src/logical_plan/display.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/display.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"355897c99662f68fae2629a4d5d6b66a5adb91a1c362d215c1886516307b4425"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions/src/regex/regexpcount.rs: datafusion/functions/src/regex/regexpcount.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in datafusion_functions::regex::regexpcount::regexp_count_inner at line 261. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/regex/regexpcount.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpcount.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"efdfc431023931e2da5d50e3e7e7216db0642331735f64e3261ff2ec811ad025"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: benchmarks/src/bin/benchmark_runner.rs: benchmarks/src/bin/benchmark_runner.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in datafusion_benchmarks::bin::benchmark_runner::cli_action_from_matches at line 438. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- benchmarks/src/bin/benchmark_runner.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/bin/benchmark_runner.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"28ba90c928e6d21ec376917ce9d10d33ce5b1442d77b2a1ac06cd232d7126c31"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/expr-common/src/type_coercion/binary.rs: datafusion/expr-common/src/type_coercion/binary.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in BinaryTypeCoercer::signature_inner at line 188. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/expr-common/src/type_coercion/binary.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c778b42c62c86746864743801e80fafe603b296fdd2b66ee10b5f7e5c4da9f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/optimizer.rs: datafusion/optimizer/src/optimizer.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in datafusion_optimizer::optimizer::map_children_mut at line 393. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/optimizer.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/optimizer.rs"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"e86e9e22c34411ccc4e8ae662b7699468ccc89aee72841b65714a8442ce22655"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-expr-adapter/src/schema_rewriter.rs: datafusion/physical-expr-adapter/src/schema_rewriter.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in DefaultPhysicalExprAdapterRewriter::try_narrow_struct_cast at line 460. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-expr-adapter/src/schema_rewriter.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-adapter/src/schema_rewriter.rs"},"region":{"startLine":460}}}],"partialFingerprints":{"codehealthFindingId/v1":"11f991ec6d3e67857cfa373db2cf848e765b3be90526cb259f8b511601f8d178"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/topk/mod.rs: datafusion/physical-plan/src/topk/mod.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in PartitionedTopKRank::insert_batch at line 1683. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/topk/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1683}}}],"partialFingerprints":{"codehealthFindingId/v1":"622c2e7e0a03bf5170a6eade8dc142afdf9d050a0f6ed1bea633d651edab882d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/decorrelate.rs: datafusion/optimizer/src/decorrelate.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in PullUpCorrelatedExpr::f_up at line 188. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/decorrelate.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"a79fcfa516ff25372b3d2d7019b2408417d70f6ba9e43f3bd7b04fbb6acef6f6"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/optimize_projections/mod.rs: datafusion/optimizer/src/optimize_projections/mod.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 28 in datafusion_optimizer::optimize_projections::optimize_projections at line 127. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/optimize_projections/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/optimize_projections/mod.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b2fe90c4d4d7b2ae1825c4ac282945e7b6ba88aaba3a0ede687db8fdb3c8a40"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/datasource-parquet/src/projection_read_plan.rs: datafusion/datasource-parquet/src/projection_read_plan.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in PushdownChecker::f_down at line 396. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/datasource-parquet/src/projection_read_plan.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/projection_read_plan.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"57a8563ae499a73a78919774f33e3c2a2e07a23c643426cef127b6f77d651fe7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sql/src/parser.rs: datafusion/sql/src/parser.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in DFParser::parse_create_external_table at line 1207. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sql/src/parser.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":1207}}}],"partialFingerprints":{"codehealthFindingId/v1":"f496ed67ca2cfc40d42f79a91d97c5ef7c95a32f7bcf14a2eb232a7a33104680"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/sorts/partial_sort.rs: datafusion/physical-plan/src/sorts/partial_sort.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in PartialSortStream::poll_next_inner at line 697. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/sorts/partial_sort.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/partial_sort.rs"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"c82c761ac8a0705f4b0c42421218eb0cdb0e342fe497743351f7398f373db1a9"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/extract_leaf_expressions.rs: datafusion/optimizer/src/extract_leaf_expressions.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in datafusion_optimizer::extract_leaf_expressions::split_and_push_projection at line 931. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/extract_leaf_expressions.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/extract_leaf_expressions.rs"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"389336ca47b965a60c563571fdbcb35a19d90446514b954181e780081d1ddcdf"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/sorts/multi_level_merge.rs: datafusion/physical-plan/src/sorts/multi_level_merge.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in MultiLevelMergeBuilder::split_spill_file_in_half at line 710. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/sorts/multi_level_merge.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb3f4099cd4345a59fc27b4b6088aaea97060d5b55d585bc2d21abd865a2a3c3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions-nested/src/resize.rs: datafusion/functions-nested/src/resize.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in datafusion_functions_nested::resize::general_list_resize at line 200. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-nested/src/resize.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/resize.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"f46c753335afc95d8fa80bb81e0334920e3240c2fcb71f4369ff18d23f76748a"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/core/src/datasource/listing_table_factory.rs: datafusion/core/src/datasource/listing_table_factory.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in ListingTableFactory::create_inner at line 80. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/core/src/datasource/listing_table_factory.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/listing_table_factory.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f09fcba1ff829c5582f4b3523b2f8d80bf9619512ba88ee6855f9f134dab099"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions-nested/src/range.rs: datafusion/functions-nested/src/range.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in Range::gen_range_timestamp at line 431. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-nested/src/range.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/range.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"83bab81de948c8f54e95986f485002be8c0338d04f3db2f67c49bd6bcedc15b3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/decorrelate_predicate_subquery.rs: datafusion/optimizer/src/decorrelate_predicate_subquery.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in datafusion_optimizer::decorrelate_predicate_subquery::build_join at line 525. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/decorrelate_predicate_subquery.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate_predicate_subquery.rs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f2ff3290ecf0f9ef7efddcbfef2c1ddf1824175384f61994d9302de685c8117"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions-aggregate-common/src/aggregate/groups_accumulator.rs: datafusion/functions-aggregate-common/src/aggregate/groups_accumulator.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in GroupsAccumulatorAdapter::invoke_per_accumulator_with_scratch at line 314. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-aggregate-common/src/aggregate/groups_accumulator.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/groups_accumulator.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea1d01127cb14ca997ae3d11aadd8d9b0c762bca0289fab34bbe0020050adf1e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs: datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in datafusion_physical_plan::joins::piecewise_merge_join::classic_join::resolve_classic_join at line 438. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/piecewise_merge_join/classic_join.rs"},"region":{"startLine":438}}}],"partialFingerprints":{"codehealthFindingId/v1":"b04e396c2ce2f0f7fd0a85c7a1123c40ea01a6cd7bcbef2941265681a4af5906"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sql/src/select.rs: datafusion/sql/src/select.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in SqlToRel::select_to_plan at line 99. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sql/src/select.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/select.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"8da39bf07486179ebbbccb663218bf87f6791788bea72782e0bb7ca09dfb31f0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/expr/src/logical_plan/tree_node.rs: datafusion/expr/src/logical_plan/tree_node.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 27 in LogicalPlan::map_children at line 76. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/expr/src/logical_plan/tree_node.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/tree_node.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"310cc809e4835f9371dc785c5a597f7e678beecb4c782bee6cf20bd0c2011563"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion-cli/src/main.rs: datafusion-cli/src/main.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in datafusion_cli::main_inner at line 200. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion-cli/src/main.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/main.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b752d4daf7cba9750d86d63e40afcb1e2f5286346423e92e667a59f12e436f0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-expr/src/window/standard.rs: datafusion/physical-expr/src/window/standard.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in StandardWindowExpr::evaluate_stateful at line 156. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-expr/src/window/standard.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/window/standard.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"057beaaf8c1baad978f9a2f141c056f6f78b09c5949da1400e66d5db8777edcd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/datasource/src/boundary_stream.rs: datafusion/datasource/src/boundary_stream.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 24 in AlignedBoundaryStream::poll_next at line 227. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/datasource/src/boundary_stream.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/boundary_stream.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"797748526fa471270406c5f0fbd1000687be9c13eb9f563a6fe18e5fdf0f7dc3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/expr/src/logical_plan/invariants.rs: datafusion/expr/src/logical_plan/invariants.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in datafusion_expr::logical_plan::invariants::check_subquery_expr at line 157. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/expr/src/logical_plan/invariants.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/invariants.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ee2c5cc9a2a4bb1ed9217846029ad39425e28b2a4804235b59eecd1af50d6e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/substrait/src/logical_plan/consumer/rel/read_rel.rs: datafusion/substrait/src/logical_plan/consumer/rel/read_rel.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in datafusion_substrait::logical_plan::consumer::rel::read_rel::from_read_rel at line 38. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/substrait/src/logical_plan/consumer/rel/read_rel.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/rel/read_rel.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"84098a51efe993a0dad44e9abb96cae9fc550dac6b4e1af91da2202bc8c416fd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/core/src/bin/print_functions_docs.rs: datafusion/core/src/bin/print_functions_docs.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in datafusion::bin::print_functions_docs::print_docs at line 92. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/core/src/bin/print_functions_docs.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/bin/print_functions_docs.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3e772729923cf11713e592fe680dac598b459d3fe6311bd7eeec038b529b17b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/spark/src/function/url/parse_url.rs: datafusion/spark/src/function/url/parse_url.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in ParseUrl::parse at line 82. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/spark/src/function/url/parse_url.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/url/parse_url.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"4444d90a4f53361c9885a8d2baaae9f1374ac54b5f49d7f28c51251c3f79fc8e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/spark/src/function/string/format_string.rs: datafusion/spark/src/function/string/format_string.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in ConversionSpecifier::format_decimal at line 1958. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/spark/src/function/string/format_string.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/format_string.rs"},"region":{"startLine":1958}}}],"partialFingerprints":{"codehealthFindingId/v1":"40fb4eb71347b4db9baabb3e4a001a5eb17abc5010ceedd7392f5723922da134"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions-nested/src/replace.rs: datafusion/functions-nested/src/replace.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in datafusion_functions_nested::replace::general_replace at line 435. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-nested/src/replace.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/replace.rs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca53154092e0bdedd465c4210aba9d538a879bdffae063436f5e716b8750aff"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/functions/src/math/trunc.rs: datafusion/functions/src/math/trunc.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 19 in TruncFunc::invoke_with_args at line 147. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/math/trunc.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/trunc.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d3fb4cea684f56e8dfb222fd646aca6b0ed8467bc34039f7b094b02d43f29dd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/spark/src/function/url/url_decode.rs: datafusion/spark/src/function/url/url_decode.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in datafusion_spark::function::url::url_decode::spark_handled_url_decode at line 191. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/spark/src/function/url/url_decode.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/url/url_decode.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"42f09983ac4382578e90809b5cd2ab93222e3ae8d8e9d6bd8763032e6abf6a8b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/optimizer/src/push_down_limit.rs: datafusion/optimizer/src/push_down_limit.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in datafusion_optimizer::push_down_limit::rewrite_limit at line 93. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/optimizer/src/push_down_limit.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_limit.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"d675c23da0e0f98e3a6e3b59bf297d68de7606f7c90d083d328f0dde5fcc9619"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/sql/src/unparser/utils.rs: datafusion/sql/src/unparser/utils.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in datafusion_sql::unparser::utils::date_part_to_sql at line 450. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sql/src/unparser/utils.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/utils.rs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea52aa52fe48b5ff4454c4f70c4bf8b2ddc216d13d6b3d07804a64bb7add92bc"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: datafusion/physical-plan/src/joins/array_map.rs: datafusion/physical-plan/src/joins/array_map.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in ArrayMap::lookup_and_get_indices at line 286. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/joins/array_map.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/array_map.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"62bd619448fee2b378bd13a353c702cfec5a784ca8e4b572779bde7741a95231"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions-aggregate/src/average.rs: datafusion/functions-aggregate/src/average.rs changed 9 times in last 90 days and 6 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 7 (its worst body is Avg::accumulator at line 292), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201CFix panic from \u0060avg(x ORDER BY y)\u0060 (and more) (#25711)\u201D; \u201CFix AvgGroupsAccumulator::size() self-overcount (#25117)\u201D; \u201Cfix: Address avg return type overflow for decimals (#24371)\u201D; \u201Cchore: fix malformed example tables in aggregate function docs (#24503)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-aggregate/src/average.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/average.rs"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"26be03c3290d2f32269bd0078624ccd6b1b0a300c1d371f7a15041802d0542b4"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions/src/regex/regexpinstr.rs: datafusion/functions/src/regex/regexpinstr.rs changed 8 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 7 (its worst body is datafusion_functions::regex::regexpinstr::regexp_instr_func at line 151), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: apply regexp_instr subexpr to the N-th match, not the first (#24991)\u201D; \u201Cfix: report regex compile failures as DataFusion errors, consistently across the regexp family (#25352)\u201D; \u201Cfix: Propagate NULLs in \u0060regexp_count\u0060, \u0060regexp_instr\u0060 (#24239)\u201D; \u201Cchore: fix some scalar function docs (#24134)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/regex/regexpinstr.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpinstr.rs"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ddc0f6dc8b4a4b211baad6fc59b669d745e01e951e716fc976176de739940d9"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions-nested/src/extract.rs: datafusion/functions-nested/src/extract.rs changed 8 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 13 (its worst body is datafusion_functions_nested::extract::compute_slice_plan at line 518), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cchore: fix the remaining malformed example tables in function docs (#24596)\u201D; \u201Cfix: preserve the input list\u0027s inner field in array_append/prepend/replace (#24365)\u201D; \u201Cfix: correct list field inner type in array functions (#24345)\u201D; \u201Cchore: fix some scalar function docs (#24134)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-nested/src/extract.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/extract.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"33a7ede3809f051b8389fb193e7792782d939c4b65e9d1305d2114897eec46ed"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions/src/datetime/to_date.rs: datafusion/functions/src/datetime/to_date.rs changed 6 times in last 90 days and 5 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 8 (its worst body is ToDateFunc::invoke_with_args at line 132), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cchore: fix the remaining malformed example tables in function docs (#24596)\u201D; \u201Cchore: fix some scalar function docs (#24134)\u201D; \u201CFix syntax examples of some functions (#23212)\u201D; \u201Cminor(fix): correct to_date results for formatted pre-epoch datetimes (#24049)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/datetime/to_date.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/to_date.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"9833e56c7945cd7d5dd1b6ec732c6048d9903f20d6cd84d3f8644de33ae0f4dd"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions-aggregate/src/median.rs: datafusion/functions-aggregate/src/median.rs changed 7 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 1 (its worst body is Median::default at line 75), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201CFix panic from \u0060avg(x ORDER BY y)\u0060 (and more) (#25711)\u201D; \u201Cchore: fix malformed example tables in aggregate function docs (#24503)\u201D; \u201Cfix: support untyped NULL input for median (#24104)\u201D; \u201CFix memory size accounting for grouped \u0060median\u0060 and \u0060avg\u0060 (#23357)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-aggregate/src/median.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/median.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b1d8cec2e0395218442f8db20ee8ba6d52b75ababe85eece6a8ba0525340d33"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/physical-expr/src/projection.rs: datafusion/physical-expr/src/projection.rs changed 7 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 8 (its worst body is ProjectionMapping::try_new at line 1292), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: preserve statistics for safe casts without extrema (#25517)\u201D; \u201Cfix: only propagate cast statistics through safe conversions (#25227)\u201D; \u201Cfix: preserve projection field metadata during physical planning (#23981)\u201D; \u201Cfix: do not derive ordering for arithmetic that can overflow (#23910)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-expr/src/projection.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/projection.rs"},"region":{"startLine":1292}}}],"partialFingerprints":{"codehealthFindingId/v1":"5257ad8e034557d8566f14260f81717f5b6788568e2c0b868dde47e5d92d0e64"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions-table/src/generate_series.rs: datafusion/functions-table/src/generate_series.rs changed 6 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 11 (its worst body is GenerateSeriesFuncImpl::call_date at line 789), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: reject mixed-sign intervals in range functions (#25520)\u201D; \u201Cfix: accept all timestamp precisions in \u0060generate_series\u0060/\u0060range\u0060 (#25173)\u201D; \u201Cfix(proto): check plan integer conversions across usize boundaries (#24483)\u201D; \u201Cfix: generate_series overflow panics at i64 boundary and out-of-range dates (#23723)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions-table/src/generate_series.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-table/src/generate_series.rs"},"region":{"startLine":789}}}],"partialFingerprints":{"codehealthFindingId/v1":"64e67fc918fb8fad14a58cc2cb5d5e9fce7cbf69fd7ab6c35f5ae4985112fe5d"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs: datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs changed 5 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 10 (its worst body is BitwiseSortMergeJoinStream::process_key_match_with_filter at line 715), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: end a sort-merge join partition once its streamed side is exhausted, and release its reservations before the final output (#25206)\u201D; \u201Cfix(smj): handle floating-point keys across batch boundaries (#25134)\u201D; \u201Cfix: drain completed sort-merge join output before awaiting input (#24685)\u201D; \u201Cfix: keep every spilled slice of a sort-merge join inner key group (#24056)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/bitwise_stream.rs"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeeda5aed1f29161512553baada5ac5a84b1061940c6d07140b2b286932e0196"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions/src/regex/regexplike.rs: datafusion/functions/src/regex/regexplike.rs changed 4 times in last 90 days and 4 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 10 (its worst body is datafusion_functions::regex::regexplike::handle_regexp_like at line 442), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: report regex compile failures as DataFusion errors, consistently across the regexp family (#25352)\u201D; \u201Cfix: accept empty flags in regexp_like and regexp_match (#25046)\u201D; \u201Cfix(optimizer): bound planning-time regex compilation (#24917)\u201D; \u201Cchore: fix some scalar function docs (#24134)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/regex/regexplike.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexplike.rs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"751413661cbfea5ee461961742ca4f6b4fd781be8f2f642a8887bbbe3e1a64b9"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs: datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 14 (its worst body is MaterializingSortMergeJoinStream::join at line 613), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: end a sort-merge join partition once its streamed side is exhausted, and release its reservations before the final output (#25206)\u201D; \u201Cfix: sort-merge join filter columns follow the filter\u0027s own column order (#25489)\u201D; \u201Cfix: ensure deferred-filtered outer joins preserve streamed output order (#24573)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":613}}}],"partialFingerprints":{"codehealthFindingId/v1":"79a7bb97d396c99cccf22c3156b65ff9478fcd1c2554a5f921787a5e02fd3229"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/common/src/file_options/parquet_writer.rs: datafusion/common/src/file_options/parquet_writer.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 10 (its worst body is datafusion_common::file_options::parquet_writer::parse_encoding_string at line 297), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: validate parquet.compression when it is set (#25626)\u201D; \u201Cfix: validate parquet statistics config (#24642)\u201D; \u201Ctest: Fix data_pagesize_limit extraction in parquet writer props roundtrip test (#23664)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/common/src/file_options/parquet_writer.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/file_options/parquet_writer.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"d033644d6f798e1b936307cea0c347a08832d7117322e1a99c661962b18dac29"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions/src/regex/regexpreplace.rs: datafusion/functions/src/regex/regexpreplace.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 14 (its worst body is datafusion_functions::regex::regexpreplace::regexp_replace at line 332), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: report regex compile failures as DataFusion errors, consistently across the regexp family (#25352)\u201D; \u201Cfix: accept an empty flags string in regexp_replace (#24987)\u201D; \u201Cchore: fix some scalar function docs (#24134)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/regex/regexpreplace.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpreplace.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"649170c38a06d4c836d1caac9aed1b5ce946531b4476499c8c8fa03574fcedeb"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/physical-expr/src/expressions/binary/kernels.rs: datafusion/physical-expr/src/expressions/binary/kernels.rs changed 5 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 9 (its worst body is datafusion_physical_expr::expressions::binary::kernels::bitwise_or_dyn at line 85), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: report regex compile failures as DataFusion errors, consistently across the regexp family (#25352)\u201D; \u201Cfix: preserve dictionary-value nulls in scalar regex operators (#23966)\u201D; \u201Cfix: coerce SIMILAR TO operands to a common string type (#23704)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/physical-expr/src/expressions/binary/kernels.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary/kernels.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6a8ea8efd4773348b1061dc14e34909a2f21ca56b602c1b0900083a0ab5a55f"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/functions/src/regex/regexpmatch.rs: datafusion/functions/src/regex/regexpmatch.rs changed 4 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 9 (its worst body is datafusion_functions::regex::regexpmatch::regexp_match_scalar_pattern at line 162), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: report regex compile failures as DataFusion errors, consistently across the regexp family (#25352)\u201D; \u201Cfix: accept empty flags in regexp_like and regexp_match (#25046)\u201D; \u201Cchore: fix some scalar function docs (#24134)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/functions/src/regex/regexpmatch.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/regex/regexpmatch.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"99c8d8905c3ed9d262e8d0ec0899cbbc11bf3ac5a5ddd1ed73658b1aab430c2b"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/sqllogictest/src/engines/conversion.rs: datafusion/sqllogictest/src/engines/conversion.rs changed 4 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 4 (its worst body is datafusion_sqllogictest::engines::conversion::float_to_str at line 50), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201CFix Postgres decimal formatter clippy (#24975)\u201D; \u201Cfix: keep decimal precision for SLT tests (#24934)\u201D; \u201Cfix: Handle decimal columns consistently in SLT tests (#23161)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/sqllogictest/src/engines/conversion.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/engines/conversion.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7dc995a8260f1db76b5139ab9ab6656e9fae83481876d80cd569f6358c63341"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: datafusion/common/src/stats.rs: datafusion/common/src/stats.rs changed 4 times in last 90 days and 3 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 14 (its worst body is Statistics::with_fetch at line 555), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfix: ignore exact empty files in ordering analysis (#24648)\u201D; \u201Cfix: preserve total_byte_size in calculate_total_byte_size when num_r\u2026 (#24027)\u201D; \u201Cfix(common): preserve an exact zero through filter selectivity estimation (#23936)\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:31:20 \u002B00:00\u0027 --until=\u00272026-09-29 01:31:20 \u002B00:00\u0027 --full-history --no-merges -- datafusion/common/src/stats.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e7cd5381905b0334986830f71463d37a6a4debd8227db6fd48de39a7c94e85f"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 6 significant file(s) lose their only recent owner: datafusion/datasource/src/morsel/mocks.rs, datafusion/datasource/src/morsel/mod.rs, datafusion/datasource/src/file_stream/metrics.rs, datafusion/sqllogictest/src/test_file.rs, datafusion/common-runtime/src/join_set.rs, datafusion/datasource/src/file_stream/builder.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"92ce7f5f2514c73312188f8103f4dd7a8221734eea3b88ca876212100e4a74f9"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 4 significant file(s) lose their only recent owner: datafusion/physical-expr/src/expressions/in_list/branchless_filter.rs, datafusion/physical-expr/src/expressions/in_list/dictionary_filter.rs, datafusion/physical-expr/src/expressions/in_list/array_static_filter.rs, datafusion/physical-expr/src/expressions/in_list/result.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"fa7f8d5aca570d3b0698027f1e1a9f6ffa4ff7cfc968e36bf2e4c8bacf2ced33"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 4 significant file(s) lose their only recent owner: datafusion/physical-plan/src/proto_test_util.rs, datafusion/datasource/src/proto.rs, datafusion/datasource-parquet/src/opener/early_stop.rs, datafusion/datasource-parquet/src/test_util.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"deaff3c3829ecde7304e0818c58424bd8d4bdfd7942c18b059f3dbb688101b8c"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 3 significant file(s) lose their only recent owner: datafusion-examples/src/utils/example_metadata/model.rs, datafusion-examples/src/utils/example_metadata/parser.rs, datafusion-examples/src/utils/example_metadata/discover.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"07597e58505fbf321172760ad812501521c224245f6b777f00f738e3b608ea8e"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 20 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (43 single-owned of 1096 analysed files in total, counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 1096 of the 1246 production source files in this repository met that bar). They are anonymized user #5 (2 file(s)), anonymized user #6 (2 file(s)), anonymized user #7 (2 file(s)), anonymized user #8 (2 file(s)), anonymized user #9 (2 file(s)), anonymized user #10 (2 file(s)) (\u002B14 more) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ///   TODO: Include special join types (Semi/Anti/Mark joins) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/nlj.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd1abe0fda0993d8fd8eaf14ffcb0bca924ce523e2fce7cfeef56c0ceaa4ff7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: ensure the optimizer won\u0027t change the join order (it\u0027s not at \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/nlj.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"91776219771529876e8cddbd2e2ae25613ff1222769bfa413a86c06df67f29ae"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack to avoid \u0060default_value is meaningless for bool\u0060 errors \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/imdb/run.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff11f0412b4166081c579e9c234863da220af92021f448b6c56093149312174e"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack to avoid \u0060default_value is meaningless for bool\u0060 errors \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/tpcds/run.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8a4ed81aac6644cefd16c8c846194f75d2cc28403ed59aeb0f993890ed9775a"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // hack to avoid \u0060default_value is meaningless for bool\u0060 errors \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/tpch/run.rs"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"b00bc577ce0047933559b337bf02d99f29ceeb6b841a6577655e543bb1aebffc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO maybe we can have thiserror for cli but for now let\u0027s keep it simple \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion-cli/src/main.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"93bac8d8e5b1cf09b9a6ffd6106e93a3c3e01b1060d85b5e363f46eebfff5cbf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stable functions could be \u0060applicable\u0060, but that would require access to the context \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/helpers.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e0618e76a7a0de9775765932614897521a71d1cfdb0c05df246766258fe11cf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stable functions could be \u0060applicable\u0060, but that would require access to the context \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/helpers.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"2818720c033778a8840d0408be799454e6b45c36f8047a6ad6607890b040f785"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO other expressions are not handled yet: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/helpers.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"4050e5db14598a4862bcb8b84b6e53b2162610cfd2622b46deace6e0170d2894"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment repeated across 11 files: The identical TodoComment appears in 11 files (13 occurrences) \u2014 almost certainly one boilerplate line from a single migration or decision, not 13 independent debts. Fix the systemic cause once rather than file-by-file. Text: \u0022// TODO: remove the next line after \u0060Expr::Wildcard\u0060 is removed\u0022. Source code is not a task system: track the cleanup where tasks live. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog-listing/src/helpers.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e4573607797460cf5e130958ec6c607ffe7fe2a0ad4efcc9d47d45eb1c7f340"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stream this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"df0807aeecc98ebb385d52c675d2b14b87f6963166716dbaccf51bd4a6f1cd6d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stream this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"68d0055a25c8d3ffbc3a4ab23a5bb0f6e8162f7f82670772e2bdab6e4e623fc7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stream this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":857}}}],"partialFingerprints":{"codehealthFindingId/v1":"c80ac3628add9277e9ddae0182617ce19e31239d42f1795199fe02daf7165448"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stream this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":1153}}}],"partialFingerprints":{"codehealthFindingId/v1":"6182f6394a7e73b13d25ea89225a91db9ff6e9b6ac5f4f86b174d6244414f77b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stream this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/information_schema.rs"},"region":{"startLine":1199}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9eee5fb3f845b6d8bba0fbe245364466a663dc63f08b255355463308626e6e7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we support filter pushdown? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/cte_worktable.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"b91d7c02fc844f031a23a17dc91d4f19a3fb7e31c713c496552d545b7f2dc2ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Can input stats still be used, but adjusted, when \u0060skip\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/stats.rs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4bb2378d802dc2eaf613d4b48897e762b2b5f3c0ccbf5a681140eccc0c8b63f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //! TODO: Remove this custom implementation and the \u0022libc\u0022 dependency when \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/rounding.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"4389186c0ac85cf0ef401b358d0bd3cd5be1c441c0fd621b8720de3bad1cc560"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Let\u0027s decide how we treat the numerical strings. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/config.rs"},"region":{"startLine":2636}}}],"partialFingerprints":{"codehealthFindingId/v1":"520ec927bb7d95a6db1405ef276e5814c0b6ef032aa9f8248dba550285c49686"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO If [\u0060DFSchema\u0060] had spans, we could show the \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/column.rs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"255071407d2402b5270b4134b7d8cebed2612e3365454e1b281fd4c2a6d8df16"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO expand unit test if csv::WriterBuilder allows public read access to properties \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/file_options/mod.rs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56d4a7b1125946167b7e63c7d4b27bc889b4936a623e861a8e2cbca1ffe2d63"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO potentially upstream this to arrow-rs so that we can \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/struct_builder.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"82ea1a0bc1375fc45e48222b16788cac0ce5d51c937723d02970ef615f197a3b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO potentially upstream this to arrow-rs so that we can \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/struct_builder.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2abcd11e1da49871d0db92dbeaab09046ecec1c3ae92505b8e94777c606f126"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we might want to look into supporting ceil/floor here for floats. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":2679}}}],"partialFingerprints":{"codehealthFindingId/v1":"e80a09f48ed2d51b42ae87389627915bda4af7c6f979c2394afc9d45f253d29d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: There is no test for FixedSizeList now, add it later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":4124}}}],"partialFingerprints":{"codehealthFindingId/v1":"adbb11530c7641e54297ac1919459547f7cbd3c563eac5ae8c97573a1ce6c994"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: https://github.com/apache/arrow-rs/pull/9213 might fix this ^"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":8641}}}],"partialFingerprints":{"codehealthFindingId/v1":"16bee3290fc29bbd3f116a5c394467a635bdfa854d452e8a30e7179742993ed6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if negate supports f16, add these cases to \u0060test_scalar_negative_overflows\u0060 test case \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/mod.rs"},"region":{"startLine":9335}}}],"partialFingerprints":{"codehealthFindingId/v1":"6524abd92b136fdb1c24f3995755d44420dfff7ddaeda8afbb649d7a55247521"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: simplify this after https://github.com/apache/arrow-rs/pull/10363"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/scalar/consts.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d60ef3d888aaa0ccac7e9ad349778a12c97981adac90389741cc1832e23f086"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Modify this to also allow specifying how listviews should be treated. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/utils/mod.rs"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e5c4a159e683490604ecf1bef7062616dcbde740b1676913d09791003defb93"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: handle list view and map \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/common/src/utils/mod.rs"},"region":{"startLine":1299}}}],"partialFingerprints":{"codehealthFindingId/v1":"82f82da1e1ab392c2e12e7ae1877e08487791529fa7e7aae3fa370d5203a894a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (DataType::Union(, _), DataType::Union(_, _)) =\u003E {} \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/schema_equivalence.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eeedcceec1a665b192a73c6f8e5182cf4b7749bdc2ab9809dfece8476d4a227"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (DataType::Dictionary(_, _), DataType::Dictionary(_, _)) =\u003E {} \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/schema_equivalence.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"2386009d8cfe28648ce619dfd85543a68c8b33cd82d3b777f2451295c51f468a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (DataType::Map(_, _), DataType::Map(_, _)) =\u003E {} \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/schema_equivalence.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"ded4b18caaf90f33126acd5d8b03b8eafd4e8d7c9db4a5cc392010c8824f6bec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (DataType::RunEndEncoded(_, _), DataType::RunEndEncoded(_, _)) =\u003E {} \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/schema_equivalence.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e6a254c07ea69666141759a8b9e3fd4de6265ad504a184fcb9b1f03161b032e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Can we extract this transformation to somewhere before physical plan \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":1369}}}],"partialFingerprints":{"codehealthFindingId/v1":"b773d363efe5de4bb86388b8e41c6eb9fd9d12b03f51780e1c9e1272e0261d34"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \u0060num_range_filters\u0060 can be used later on for ASOF joins (\u0060num_range_filters \u003E 1\u0060) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":1506}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed4b79c41eb317dfe2df3e67c78923120cbc8cf5c8c23779c7fc51f1c008e70c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Want to deal with \u0060Expr::Between\u0060 for IEJoins, it counts as two range predicates \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":1533}}}],"partialFingerprints":{"codehealthFindingId/v1":"91d923ea56e6bf0c1cc9931f9a1556e17124aa19e98ec4c0b0de2eaeaefcb635"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Allow PWMJ to deal with residual equijoin conditions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":1638}}}],"partialFingerprints":{"codehealthFindingId/v1":"214ac0fbf22e1c04405dfa3e0303925691abbfd2d6929469df54125768b99262"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment repeated across 19 files: The identical TodoComment appears in 19 files (25 occurrences) \u2014 almost certainly one boilerplate line from a single migration or decision, not 25 independent debts. Fix the systemic cause once rather than file-by-file. Text: \u0022// TODO: collect info\u0022. Source code is not a task system: track the cleanup where tasks live. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/physical_planner.rs"},"region":{"startLine":5198}}}],"partialFingerprints":{"codehealthFindingId/v1":"16ebe2a07bab36989f999cb9677250dff5ca32b3e390118dd3d9296baab2bab3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (https://github.com/apache/datafusion/issues/11600) remove downcast_ref from here. Should file format factory be an extension to session state?"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/listing_table_factory.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"37b2413977e1cb03c05af6d73c20508e75da96cea8238a454cf6ebb142e74372"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO correct byte size: https://github.com/apache/datafusion/issues/14936"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/file_format/parquet.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"58752708756c4889d736a01ddad072739fe1a28fe516151d41c74df8567fcf49"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO correct byte size: https://github.com/apache/datafusion/issues/14936"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/listing/table.rs"},"region":{"startLine":1735}}}],"partialFingerprints":{"codehealthFindingId/v1":"d44a651a918446ae4ea39261975b20cf40a759864bd580a0d8492fce701b257f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO correct byte size: https://github.com/apache/datafusion/issues/14936"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/listing/table.rs"},"region":{"startLine":1784}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e800a68a127a6beb8c8fd5382cfd27c2493e8cefe1c23685caa83882410080f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO test with create statement options such as compression \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/listing/table.rs"},"region":{"startLine":1017}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d8e66d5d2005f18cd09c223f42021372ac33371cde139c49eca40a807d6dd36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is not where schema inference should be tested \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/physical_plan/json.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c97ca92b17f611c15f9fec06cd8b31e69dc665bacab10260415605afc9130ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO what about the other statements (like TransactionStart and TransactionEnd) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/execution/context/mod.rs"},"region":{"startLine":738}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b6f7ed2f400534fc330b57c430e608d334ee42435925339dc5d29071a8fc23c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO stats: knowing the type of the new columns we can guess the output size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/custom_sources_cases/statistics.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"8735cfb6c54b92197cf6dd8a65fc82d7b1d962bec9af2d70ef2841d107435ef6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO fix https://github.com/apache/datafusion/issues/19950"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/custom_sources_cases/dml_planning.rs"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bbdbf5d9712be0b197e4903d4d21bffb9e50845189bd4fe9fe6d01b2481843b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO fix https://github.com/apache/datafusion/issues/19950"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/custom_sources_cases/dml_planning.rs"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"8050bc029b83056523f899758e3e36fd4051f4e87726b6d97ab7db7a7a7e2d1c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO fix https://github.com/apache/datafusion/issues/19950"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":1195}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b9068508453b3ad9883fb32ce5ed1f414510c5e9c47db6b9f28f3c7e2fad881"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO should be UInt64 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/execution/logical_plan.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"61593cafced2502bda7d7f459649365b90796c50c0d69efae6a080778621a0c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: The following improvements are blocked on https://github.com/apache/datafusion/issues/14748:"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/sort_query_fuzz.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"df29a12f98da455eb07baf7d9d7280d73c8ca0a735d4f0a8173854f91ab2ea84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove this once the bug is fixed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/sort_query_fuzz.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a47f98f1124c859141dc54aa51ba1694726e90a1060a158e935f7c4cc02a0e5"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: /// Hack: If we want the query to run under certain degree of parallelism, the \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/sort_query_fuzz.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc17a91ed9665f4c90fff5d085ec0aede8422601034d179da70d290fc90dfe1b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: add JoinTestType::HjSmj after Right mark SortMergeJoin support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/join_fuzz.rs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"415beef7c6afdf06fa51ff958ed91d4afc8dec5185bc38672e27458d98ee9cd8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: add JoinTestType::HjSmj after Right mark SortMergeJoin support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/join_fuzz.rs"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa62c8e3af466d10698656ff6499e5c192db4aa357d81c66218b2984f0b7232a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Test floating point values (where output needs to be compared with some \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/aggregate_fuzz.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"181d622dc90a78ba69a050ef15d99ce185d1f737b59b7042604d2e8ce2ad5d2b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: test other aggregate functions \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/aggregate_fuzz.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"a640ca7eab776995fcaa2649ade3ab1d56af33cbe45429c67397027c4ce355f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ///   - \u0060spilling\u0060 or not (TODO, I think a special \u0060MemoryPool\u0060 may be needed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/aggregation_fuzzer/context_generator.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6d2624084fbcddc49595dda676ecaf9a9b45585adea9e390dd51404cdc69ddf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //   - \u0060spilling\u0060(TODO) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/fuzz_cases/aggregation_fuzzer/context_generator.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"a611b91af5005c8f20067508851703f42b6186fd62e0ca9e4221f0855debd149"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Query fails, fix it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/memory_limit/memory_limit_validation/sort_mem_validation.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1e03344678aca09c35d1fe6587a1b591b4a720bf40cbfbf7d46e0d1c59751af"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo but after use CNF rewrite it could rewrite to (year = 2009 or  year = 2010) and (id = 1 or year = 2010) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/parquet/page_pruning.rs"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"19c84ffc99886d09969afa9ad9cf7cb393bf408074403169c2cdae533252571b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Once [\u0060ExecutionPlan\u0060] implements [\u0060PartialEq\u0060], string comparisons should be \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/test_utils.rs"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"06607afdd7dd0de85ffd0a9400c4269de3a067b2a23badf4b39f7ac85b2becb1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(msirek): open an issue for \u0060filter_expr\u0060 of \u0060AggregateExec\u0060 not printing out \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/limited_distinct_aggregation.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"711b1994c56548bb81bcbdc99c4cf1cfaceb9f0cff90a038f36287e756b6be5e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: End state payloads will be checked here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"752bd1f65897ead11d9484349a50fdddc0509974f45ebb6e77cbe43891c1ab04"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: End state payloads will be checked here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"befa4b2f43286577f05459c17f0cbf49aa09f7cb7242828d7479742b15e1f15a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: End state payloads will be checked here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"0101b3cdb496c221b35a7a1ad512974973eb5bffa8519faa631347e74088b438"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: End state payloads will be checked here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1dff28f76ca981d6b3690a8c9107add77e790fdc184416266bd00ca25cfb6c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: End state payloads will be checked here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_distribution.rs"},"region":{"startLine":765}}}],"partialFingerprints":{"codehealthFindingId/v1":"354bbc3c9a547cf14d21849099144e330adcf622522ec8f1bcc1b33541e7468d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: End state payloads will be checked here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_distribution.rs"},"region":{"startLine":787}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ae7048b3fc92c081c3f5870504bfed6a0d52b0b8011d0d6c82e5cfe975400a8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO When sort pushdown respects to the alternatives, and removes soft SortExecs this should be changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"d924fb0c65360ef1afe577db45c622dbf3e03df6694241c7f8cf683fe9f74362"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO When sort pushdown respects to the alternatives, and removes soft SortExecs this should be changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":911}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec450125ce3683c27132b7d166e281c330a3cb0a478f5cb4ee83d5c1560e6b46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO When sort pushdown respects to the alternatives, and removes soft SortExecs this should be changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":961}}}],"partialFingerprints":{"codehealthFindingId/v1":"160425d8a8c3a719e3c179a5cf7456fa729bee56ba5f416cde87fbc7798f7c7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO When sort pushdown respects to the alternatives, and removes soft SortExecs this should be changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":1025}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f48fb038afcb0de124facbb6fc5cee2d59248daee07dd5be2103dad639b8b6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO When sort pushdown respects to the alternatives, and removes soft SortExecs this should be changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d157c094cca5e42efb28411932718740af63eb4c6b0ec42a00b5e7d67284455"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO When sort pushdown respects to the alternatives, and removes soft SortExecs this should be changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":1163}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b135823689f61d91dc21a33b157ca2fe33d2dbaea1e6ab05046cb5dea03d358"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO When sort pushdown respects to the alternatives, and removes soft SortExecs this should be changed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_sorting.rs"},"region":{"startLine":1225}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe9d3342f7f28de2780101ea86d166b1e857eb8041a2af2f753f68ba5e18cd92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wiedld): show different test result if enforce distribution first. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_distribution.rs"},"region":{"startLine":2833}}}],"partialFingerprints":{"codehealthFindingId/v1":"199682b81604aca1209db8bcf06ef2135247ea5ff36a6c804e49f19c319e07c2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wiedld): show different test result if enforce distribution first. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_distribution.rs"},"region":{"startLine":2859}}}],"partialFingerprints":{"codehealthFindingId/v1":"826450deaed8306d2a658dae482fcced19089da095a1bb3fdee5b4ce67782afa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wiedld): show different test result if enforce distribution first. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_distribution.rs"},"region":{"startLine":2939}}}],"partialFingerprints":{"codehealthFindingId/v1":"620232d009d0e4bb6fd30a1f3a8538d1a40807d19d87ccaa2db4fa0c327fac84"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wiedld): show different test result if enforce distribution first. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_distribution.rs"},"region":{"startLine":2957}}}],"partialFingerprints":{"codehealthFindingId/v1":"51616f08f2078cf0cde6c7449869146af60ff4475bc2f9bdc5fec113f0e54fdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wiedld): show different test result if enforce sorting first. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_distribution.rs"},"region":{"startLine":2894}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a05fe78d1c5e96472f6bcdeb85058412322958025e5407c359bfb09961885f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wiedld): show different test result if enforce sorting first. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/physical_optimizer/enforce_distribution.rs"},"region":{"startLine":2912}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb0c9d17cf22a4507f1f97a14f717dfca9d959a908583ab161f307ecf9d9f10"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Definitions with invalid placeholders are allowed, fail at runtime \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/tests/user_defined/user_defined_scalar_functions.rs"},"region":{"startLine":1128}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc09e730aabb54cf11fc64ec0b92ec70a5280178cee58abe28371fd43fc6488e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fetching entire file to get schema is potentially wasteful \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-avro/src/file_format.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd5bff054cb293adc8154170b3b275b4c73a1fbeb3371e9cd5964c36b2c1e3e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: avoid this clone in follow up PR, where the writer properties \u0026 schema \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/sink.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8fbecb557cfc38b47a25d4f5096013caf2a6e0cbf0b7462ed441ebb2e83668"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: It might be possible to only DFS into nested fields that we know contain an int96 if we \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/schema_coercion.rs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"d61cbebce6bec61fcc8bda2782c0117fc998f1da656f2b95e752e6ea537fb45c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: split state as this currently does both I/O and CPU work. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-parquet/src/opener/mod.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aae868700f4c1af27aa0920f969c340ab3dc00b7a6d1508e83d117f5f6b8045"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add desired input ordering \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/sink.rs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"10aa7a0827b9ca7938905f19dc3ca3fb280d40adfdf1b356a4d362574c235da0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: should the file source return statistics for only columns referred to in the table schema? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_format.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"8144c59e98a96fbe3e8721c7569e0a96f4d7288cd23b93da3d7300ccfb74e1b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: can we put this into ProjectionExprs so that it\u0027s shared code? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/file_scan_config/mod.rs"},"region":{"startLine":773}}}],"partialFingerprints":{"codehealthFindingId/v1":"e74d3cd843e219c656da7942aa94535bdc242c898cf746936e672144df9e3838"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: upstream RecordBatch::take to arrow-rs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource/src/write/demux.rs"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf783f495b6304098520a974be8ddeb1ccaae02408c1fc32b1636779b89b92df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO add ordering once LexOrdering/PhysicalExpr implements DFHeapSize \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/execution/src/cache/cache_manager.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"51a0b5b4f07f57c68afc3ba61691ed0effe1612e03ddb3e39be5df935b8867c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the insufficient_capacity_err() message is per reservation, not per consumer. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/execution/src/memory_pool/pool.rs"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"8543065f9950e3322707e401fe193e36f204bc7c1e3787a09e2e8436ace2d9e1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we ensure that this always returns a real number data type? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f5eb17b668b30a7e7556c7cdaa031ae9ee12d4a39cad724e7900170e5f5ae09"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we ensure that this always returns a real number data type? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"affcff4cb310067b5746ede09a83e251f952b53dd974c6018586a59eeadb5ae5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we ensure that this always returns a real number data type? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8eb53fedfe98570cafe2ecc318a1c09e2b88868d5b96cf12b15ce18cd300187"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we ensure that this always returns a real number data type? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"7acd01ffbe68bbdd7e5c376fe169295dc510598dcfa122481e67e0f46c0bdd12"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Should we ensure that this always returns a real number data type? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"84acd45095551a913d259c7a5f37ac326d5a4cc4fe998f9804400cd951f3f595"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We can handle inequality operators and calculate a \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3776b1f71ffb829f98425d6d37a4c4e0cd0c7f90223c02790247a3590391d0f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We can handle Gaussian comparisons and calculate a \u0060p\u0060 value \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"c912c383cb8f12d87e4b042518d5000d94544ba76b793c785610a8b9ae436b71"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We can calculate the mean for division when we support reciprocals, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"537c4b6a3d6e5352f37cd71cdf731edf3c6459771d8d7e88aad0edad63c9be79"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We can calculate the variance for division when we support reciprocals, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/statistics.rs"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"69526a50cd42652a309e5a988810559d0907f6faadf484254ef2fe7e71db24b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: might be too much info to return every single type here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/signature.rs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"235f80ae3b428179e39d2ced21198dca670f197d15100d563f639221705b8e3f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement for other types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/signature.rs"},"region":{"startLine":937}}}],"partialFingerprints":{"codehealthFindingId/v1":"e20170adb67f8ce821cbcc987cfe0b69b2f364e75aa98a4b98358aaf108eb7f2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement for nested types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/signature.rs"},"region":{"startLine":1015}}}],"partialFingerprints":{"codehealthFindingId/v1":"f92ad450a0c9ffcd9df380dccacb1cc7facbcca964d81d1ce73a64512c7f016f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// **TODO**: Once interval sets are supported, cases where the divisor contains \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/interval_arithmetic.rs"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"5edf748b01d508441f59583c350bafc170d4d341d7b2748ac8d40afcc9c983cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add tests for non-exponential boundary aligned intervals too. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/interval_arithmetic.rs"},"region":{"startLine":4122}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb7a91e10c68076d89c41d4f6b42b1230de1f73e8de001ebc83573606f197df7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add retract for all accumulators \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/accumulator.rs"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"68c6027bca18b797d761052b8f767e50cc6d98dd79160bf580283378d800faec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Move the rest inside of BinaryTypeCoercer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1bc03f6b892d8ae1b9f9e669ef346c2a87809e31b124b2b07f81ff62f162a4a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add binary view, list view with tests \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":763}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea38dc3f64aa66a03a1c201e0450e78bf890bfcc3825dbf98fae10a2b1a380bc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO if we convert the floating-point data to the decimal type, it maybe overflow. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":1278}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e991876b73347f72a9d6f7d9514ebcdd590b2272f85b489502e93196492f7f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO if we convert the floating-point data to the decimal type, it maybe overflow. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":1294}}}],"partialFingerprints":{"codehealthFindingId/v1":"36bd931aa928bbf037bd5096020a0985224e2fa2e1d4abcd43e919b1768e6208"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO if we convert the floating-point data to the decimal type, it maybe overflow. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":1312}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f020932855f2fa20e38e521e35bb7eadb7795a5b370a744620644237dab6182"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO if we convert the floating-point data to the decimal type, it maybe overflow. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/binary.rs"},"region":{"startLine":1331}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef4731d8dcc2aff311ba31612e9868df2e629424c44fcdcd16b6d0d5814200ea"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME use as_ref \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/utils.rs"},"region":{"startLine":1646}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f72d72bcf81a3bbb8f492daadb079f87f6d42866e12233cd429e25d9b007c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment repeated across 10 files: The identical TodoComment appears in 10 files (35 occurrences) \u2014 almost certainly one boilerplate line from a single migration or decision, not 35 independent debts. Fix the systemic cause once rather than file-by-file. Text: \u0022// TODO (https://github.com/apache/datafusion/issues/17477) avoid recomparing all fields\u0022. Source code is not a task system: track the cleanup where tasks live. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/udwf.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e191a7e4e29dd3e8b0e6948400c324c72f19e9acdfe4ddb68740c3231dea870"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO verify return data is non-null when it was promised to be? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/udf.rs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"9911bd1ca0ffb0c1ddbe7131059d5a18b84cac6884170968005d07fd6614f5e8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: extend this to listview and maps when remove_list_null_values supports it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/higher_order_function.rs"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdbc0d7d6115928359cd59adac024a9cf1ab44399742a2bbf8319354a16c90d7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo avoid this rename / use the name above \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0294a9118103c3d620e4322f0d6ef72c99b104defd8ed460185f6c2f05b3b38"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(kszucs): Most of the operations do not validate the type correctness \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b493dbccf847f3fdb26b3fa3223949926dd83baefec84696bcc866e97ba5346"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: normalize_eq for lists, for example \u0060a IN (c1 \u002B c3, c3)\u0060 is equal to \u0060a IN (c3, c1 \u002B c3)\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":2711}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c5c9cf3ab514753ea5db86350d5c0cfd77eb8de41bb168b21908cfceb72f130"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: normalize_eq for when_then_expr \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":2732}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b6ca7f6faad58ae4d864afe2a3703c53ba4b64844930279062bce7bdec0a6c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use \u0022, \u0022 to standardize the formatting of Vec\u003CExpr\u003E, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr.rs"},"region":{"startLine":3478}}}],"partialFingerprints":{"codehealthFindingId/v1":"063a42a6a8dc7a19a3d731fb6a5835728dd48c1499517dd99b9fa3bea2ce1e93"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: a more general optimization would be to change \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/tree_node.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"abee348b6c479ea7c608327e01f1766a8d752c653afa8b2736d0a3e6f8477234"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo it isn\u0027t clear why the schema is not recomputed here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":661}}}],"partialFingerprints":{"codehealthFindingId/v1":"c98f17576b73fc949269f04e1dae90720cdb8048bdeb191817ddfbfc43d9d42d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo make an API that does not require cloning \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"a15f3b7d666c82dc2b7bc65268145273d4e113142e817e39f42b525857246388"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO (https://github.com/apache/datafusion/issues/14380): Avoid creating uncoerced union at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":3385}}}],"partialFingerprints":{"codehealthFindingId/v1":"939289f4f5f03ff1042ab60c2619dd75a42e3a9176b787e57554116d6847374e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO (\u003Chttps://github.com/apache/datafusion/issues/14380\u003E): This is not necessarily reasonable behavior."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":3439}}}],"partialFingerprints":{"codehealthFindingId/v1":"91a2f0712e32bc18ee66e90c93fcb7c2bf75dab5caf3c58ed6ab629703030e35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO apply type coercion here, or document why it\u0027s better to defer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":3557}}}],"partialFingerprints":{"codehealthFindingId/v1":"11a7f2f1cfbd0a88d129ec1d73d2dbde64c7978d63854c8bda323b88da4f6115"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(clippy): This clippy \u0060allow\u0060 should be removed if \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":3833}}}],"partialFingerprints":{"codehealthFindingId/v1":"44df55b230fc2b0215fb96fc0b7b571c5d1a5cedb9d139c1804b13b968d648ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: may be implement NormalizeEq for LogicalPlan? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/plan.rs"},"region":{"startLine":4808}}}],"partialFingerprints":{"codehealthFindingId/v1":"b82cccbc9163a7c6c0153bcc6c2e634157728bac0ec75bcbd30fe8fd59246f4b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO revisit this validation logic \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/invariants.rs"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a00943d97b0f54b624df05946fde2f13156f891009f1bf020078d7de0b543d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: figure out how to support mode \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/ddl.rs"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"304d31cb24a98ac46a2e87929432d27696217505ec4d53011669a3b6a99c867a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: find a good way to do that \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":1791}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a15f6ce87efc23681c774c8b204e4c26a5b1b8e244bbad06c142ab6b43b3a24"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO should we take SchemaRef and avoid cloning? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":2246}}}],"partialFingerprints":{"codehealthFindingId/v1":"5000509711dfb59538bd1340a6bb97432fb92255fd941ddab6020491512e4088"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO should we take SchemaRef and avoid cloning? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/logical_plan/builder.rs"},"region":{"startLine":2258}}}],"partialFingerprints":{"codehealthFindingId/v1":"9948a98937df73c930d390390f1e2b1b048c51919a40e36d661a109cac79c55f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Deprecate this branch after all signatures are well-supported (aka coercion has happened already) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a3aedf66761c4ef072fe4a08d1b2a7f87d1eeb99df9c1872a827481b3a3148e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support maintaining ListView types here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":703}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8eb19debeb2167231317caa75a4340145c74d69eb64dedad66282416dadd6de"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Switch to Utf8View if all the string functions supports Utf8View \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":765}}}],"partialFingerprints":{"codehealthFindingId/v1":"e77dc6bcc9858c30f7e9e99fd6c299a528a5b2cca318024871d22ea19c16f202"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace with \u0060can_cast_types\u0060 after failing cases are resolved \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":1088}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a402dd8cc3d9c319090f22e0ee3c3b591edc90b861532cd29937ced84ccab5e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: I think this function should replace \u0060maybe_data_types\u0060 after signature are well-supported. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/type_coercion/functions.rs"},"region":{"startLine":1099}}}],"partialFingerprints":{"codehealthFindingId/v1":"09e8127e51b99769130b8719a54574718c57a4073b143e3297b4b8c70c0d1420"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(tsaucer) It would be good to find a better way around this, but it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/src/udf/return_type_args.rs"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea21f702ecdbe89d47b52fb1a6377dbbf460b5679bae3af5b34872c524606df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Move this to functions-aggregate module \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/stats.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87ee7f210c559766e526bedddab2d97b8d9d3fb46f22b7b8b1650eb9adb859b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Ord/PartialOrd is not consistent with PartialEq; PartialOrd contract is violated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/merge_arrays.rs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd343fdc67cfa26faa8ac306dc5fce6f4c21e5a1b7da4f6be7870f3547006df1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: replace when upstreamed in arrow-rs: \u003Chttps://github.com/apache/arrow-rs/issues/6528\u003E"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/groups_accumulator/nulls.rs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"db6259dd29e1a6b47af75eb26b1e5b1550fca7a3ef048bb15fa887aff1211e7d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // iterator. TODO file a ticket \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/groups_accumulator/accumulate.rs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"775089633d907aff24e63dba3bd526cf88b14b288d1179f14051a54a0866ac60"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // iterators. TODO file a ticket \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate-common/src/aggregate/groups_accumulator/accumulate.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ea4a09a0287d50e4060579f335924802fc727d915343d67937b4a38bd4a018"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Expand these utilizing statistics. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/sum.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"c51ce002a18ae86287a2bff9b1626815bccd36fe9a4af207abd663e126855dd3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO support other numeric types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/sum.rs"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dcd0b1d2fe4666b823f150caa29a966fc1b8444eb2820df79ce0aa4dc151253"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Calculate size of each \u0060PhysicalSortExpr\u0060 more accurately. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/nth_value.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"2089365b924e789394655d4aee851e7e04ee0c28275f131cbd3757ebb6c71557"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add checker, if the value type is complex data type \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"a924bf141ff2050bf6b8285e7e2660ee567aa9996157dae3d4571173562f8a52"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add checker for datatype which min and max supported \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"43711647f651fe9c45d06c73d91202b2ffc0724c709cc241cbaa6441eb42e529"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO optimize with exprs other than Column \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/min_max.rs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdee3fe31ee1c64bb0b0ae85d1546c4e034db707d7349751ccf2191515667310"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO optimize with exprs other than Column \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/count.rs"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c6c0bde5e70465b648c7cf2cd7b3ea48efe202bce7c091c8d04899a1b6a6f46"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: whether this is \u0060DistinctHandling::Insensitive\u0060 depends on \u0060ORDER BY\u0060. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c5b70f83dfe97aa58fadd49ed845090b9c86930fe19a68c21d6bf2f6a896165"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: whether this is \u0060DistinctHandling::Insensitive\u0060 depends on \u0060ORDER BY\u0060. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":1306}}}],"partialFingerprints":{"codehealthFindingId/v1":"e70dbe14442a3ce88f11b2dd2d048e8e6b6db1ca34d7421ccd845b6c3e097f63"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: null input skipping logic duplicated across Correlation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/correlation.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fbee0ad87f7c5ca6b1d0e768bf0ecfc8fc5f910e180608bf807821581bd972b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is arguably \u0060DistinctHandling::Insensitive\u0060 \u2014 the accumulator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/any_value.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d8e375058d878e631904eb2bd50e62555dc6e93b6654933b7c75c57f392b8bc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consider switching to a more efficient \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/string.rs"},"region":{"startLine":703}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba90a6c9d9e7e83bf3393d77c1a72c21143bacbcd92858bdd55a0cf076b7416"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: concat function ignore null, but string concat takes null into consideration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/planner.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a7193971737d92d4bbba498f5b0d5b0f045aec5c94000254352f8132e616977"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: should metadata be copied into the transformed array? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-nested/src/array_transform.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d5e84f957ed1d63d9a8adc31226cc7a90b354287b31a5d970c5354833d8d42c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: change the original arrow::compute::kernels::window::shift impl to support an optional default value \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-window/src/lead_lag.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"f50bb9e86360137f79861dc9017da0eeed75edce325c931e6b0206c128b10866"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO it would be great to add rust version and arrow version, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/core/version.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"16fde0194d18bfb1d3fcf3903d75a35ed4c82d0a354e09f0320211a7389a3383"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //     TODO (my next PR): without \u0060INTERVAL\u0060 keyword, the stride was converted into ScalarValue::IntervalDayTime somewhere \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/datetime/date_bin.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ba25d253f26a78d33cae3026be1fbb9b2670c5982727699f532f759601fca6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: could we be more conservative by accounting for nulls? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/encoding/inner.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"e32dbcf90478c0cb48ca0090314d762a2479124fa3133805bc41e6171c839f35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement ordering rule of the ATAN2 function. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/monotonicity.rs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"eece63220d9c4bf7ee636f2f389628d836c7413812397b041a366a843cff110a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement ordering rule of the ATAN2 function. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/monotonicity.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc206dd787a1ca44189064e6c646b1e3ac0731527c9f4962733e9ab0313ca1c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement ordering rule of the SIN function. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/monotonicity.rs"},"region":{"startLine":591}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f4c044e7021736a86cf7f3810e2aaeb2d3dede3433e0a1e36868228f13554b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement ordering rule of the TAN function. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/math/monotonicity.rs"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"0392304081464ddd1df0cc86fcc72047cbe856ea02b72eaca7414e5daaa5941f"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: can be simplified if function has specialized \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/unicode/substr.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2828ebbf98506288f4edfc7d8dd7ed7771b69be90e5b7aa97f0e8ccfb99c433"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO use LogicalPlanBuilder directly rather than recreating the Aggregate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/replace_distinct_aggregate.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ed79209c54fa2480c60fd2f6f12fc5f92d728c9bcb8940fe0331f31a91ae23"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: In this case we can sometimes convert the join to an INNER join \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/push_down_filter.rs"},"region":{"startLine":2762}}}],"partialFingerprints":{"codehealthFindingId/v1":"252fb94048160f019841a6296759c22008b082f27143d2caf6804335ec1fc5dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix this long name \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/propagate_empty_relation.rs"},"region":{"startLine":595}}}],"partialFingerprints":{"codehealthFindingId/v1":"c09ff58d4f8611f02d52e76aee465b37cbef7745678d84853f7416ac41a44b44"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support HAVING in lateral subqueries. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate_lateral_join.rs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0a33fed9d0f87d3cf74ba844face57cddfc2d36c07610730f2265a359e364c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how do we handle the case where we have pulled multiple aggregations? For example, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/decorrelate.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"3769fc466611f211d6d5f9cb45d5afc3f8e62e6ffdcce6e257aca34bba12a742"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Although \u0060find_common_exprs()\u0060 inserts aliases around extracted \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/common_subexpr_eliminate.rs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fae84e63128be9e3efa723e523fe20698405c68b8ff1fa0bc77ad0101b7fbd3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Although \u0060find_common_exprs()\u0060 inserts aliases around \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/common_subexpr_eliminate.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"43c6aa3283a81e82ff80a09ddf559bc5d8f93dbf687c088498166f9da33c4750"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: there\u0027s an argument for removing \u0060Literal\u0060 from here, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/common_subexpr_eliminate.rs"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a5de95f305ec4e966e90d60d04fa1f385b57d9c02e3a7d36ff5564f317238a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we should cast col(a). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/type_coercion.rs"},"region":{"startLine":2471}}}],"partialFingerprints":{"codehealthFindingId/v1":"979b52c1a46860f400e6982df5293755236a71deaa99f38bf512b0b5471a297a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do something better than name here should grouping be a built \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/resolve_grouping_function.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"f595bb747d4b25846840fba0e33342eebe0e354567393b7b4a1c865803b644c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add common rule executor for Analyzer and Optimizer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/analyzer/mod.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f7c935d4338c86492fea08fc9a6f99d8bbad28a8da31920607a12c1aac854d5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For some subquery variants (e.g. a subquery arising from an \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/optimize_projections/mod.rs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ba1793ebce2a57b582b5748aa369e0919ac56d2630c424b152028d7aaed8610"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Only try for integer types (TODO can we do this for other types \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/unwrap_cast.rs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"f668fb046fa22ff4d6a3ad5d9265ea7b9996962bea276e66a8d1cec104da44ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: handle escape characters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":1785}}}],"partialFingerprints":{"codehealthFindingId/v1":"f245698d90642331aa92a4a924879bc503f2ff3978ca4c49b6684cc10adca7d4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We might not need this after defer pattern for Box is stabilized. https://github.com/rust-lang/rust/issues/87121"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":2295}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa479905f8c5d5636c50f0483b0030c9987aa4272815d0d80e7df5296c39a640"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We might not need this after defer pattern for Box is stabilized. https://github.com/rust-lang/rust/issues/87121"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":2328}}}],"partialFingerprints":{"codehealthFindingId/v1":"67320a2a65e93661f8d8b8d45ea70c8838c145f2b4a2f7894c0b98f429854c51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Further simplify this expression \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs"},"region":{"startLine":4936}}}],"partialFingerprints":{"codehealthFindingId/v1":"8774b9f0f138ceef7b35c478f220630e95cdb31d495b2fecb860f9ee75f0fb77"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: change to to_string() if all the function name is converted to lowercase \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/optimizer/tests/optimizer_integration.rs"},"region":{"startLine":814}}}],"partialFingerprints":{"codehealthFindingId/v1":"122b59927774189a8d04e6ede618320533e345693373b76f580e7e6cb9fd2e72"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: change to to_string() if all the function name is converted to lowercase \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/tests/common/mod.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"86bad4fb35cf3ccedf8f906d12d446f560b97cf523318c211a4824d9dbbb261e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add optimization to move the cast from the column to literal expressions in the case of \u0060col = 123\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-adapter/src/schema_rewriter.rs"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdae3307dcbdd910ff533b6b44fbd74f6d9bcf2df5acf4483fd2c86b1024a810"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace this assertion with a condition on the generic parameter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/sort_expr.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac07995b6054faf6006e0ba0ade659e71024f0f592f453141db5542e3f75cbfe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace this assertion with a condition on the generic parameter \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/sort_expr.rs"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"3141e92bde0f000315065ff89c1d0194fbfe582cae4f171500cd590dba02889d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make SortOptions configurable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr-common/src/datum.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"53efa2e073c56f3aa4c665bf6f38b2576b1b0cab0bf154ac64e7b2fb607b8310"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this makes a deep copy of the Schema. Should take SchemaRef instead and avoid deep copy \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/planner.rs"},"region":{"startLine":730}}}],"partialFingerprints":{"codehealthFindingId/v1":"af948258ee0b0c9a20160377263874d99dc3e769cbda216cccab75a79f0380a6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement this for scalar value input \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/async_scalar_function.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"a636fbeffddfcdedb83d574c56f4a8e77eb6a20a5aee52c63921e1b8824ce5b2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: need to align arg_fields here with new args \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/aggregate.rs"},"region":{"startLine":1077}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcc73a3357ca7951f049d9f41a5bef8b3fc30334e4736bf04f31d08fa98ce12b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Human name should be updated after re-write to not mislead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/aggregate.rs"},"region":{"startLine":1082}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9f119cef47a03645fafb5657debece20d0bfe8514df2bbbf60e2c2fee733fbf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: If we know that exp function is 1-to-1 function. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/ordering.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f0e8aada64d64b346316e23caa47f1bda3b914868a0ed41e385c5abcaf3b025"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The \u0060ConstExpr\u0060 definition above can be in an inconsistent state where \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/class.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"96b43842fb33ce21c19a3f58587c4554e9536530c64b69a13d53a5fbcaec3c36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Return an error if constant values do not agree. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/class.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1c0c23a3cd545628060fc1ba677dda2430ff0cf858f9d125de3b0cfd9cd7761"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Return an error if constant values do not agree. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/class.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"70e327f70e44287c68d7dbe21244a1cabeeeb5b6178154b6faac5e49a9b6ca6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Return an error if constant values do not agree. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/class.rs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc85bea0dec76a7de9e8999bc9f9ff8818b7e7fce23da10cb397925889a7ee6f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This function should be able to return values of non-literal \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/class.rs"},"region":{"startLine":785}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f1abaa87c4fa66c1cbd48a2f4e7ad21547485381d2a7bd99f00e6d7cd493bc8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: In some cases, we should be able to preserve some equivalence \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/union.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"a89540b27370c954a4b752c7a8a3a5721ce1f520b6b53b1ce204231f23ec6f09"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO tests with multiple constants \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/union.rs"},"region":{"startLine":688}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b0a47d73f0b2d6a1f11e47fa73420fd74e9a3e0cd7ad30b56c07c3167682d5e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: If no ordering is found to be redundant during extension, we \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/mod.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"0005f62f99087ec712e89af46275f17fafb84781e647ed39f4260ccc2dd2acee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Handle all scenarios that allow substitution; e.g. when \u0060x\u0060 is \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/equivalence/properties/mod.rs"},"region":{"startLine":915}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb8714487eb335759a387a0cc6f3d330449d1af639991e7a6934738516afd4ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO we should add function to create Decimal128Array with value and metadata \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/try_cast.rs"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"c99b06d0dbdb1369029dfaac5ef781c9d5d606aaa75f0636b9da6e3a701da9fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: There may be rules specific to some data types and expression ranges. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"89c280f9e243295d6cb0dac3221e7d9ebe4d2b4eddc6e735e14a9560583fca88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: now we do not refactor the \u0060is distinct or is not distinct\u0060 rule of coercion. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/binary.rs"},"region":{"startLine":4783}}}],"partialFingerprints":{"codehealthFindingId/v1":"7492a18166c5483b9352189c4968e26fa212ac640841c01dc2232c4ae30ec1ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - We need to port it to arrow so that it can be reused in other places \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/case/literal_lookup_table/primitive_lookup_table.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"6026857e9404fdcf235270280e8bd03e73edb1473682fca1dc88cd0f0e17c111"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO - we should think of unwrapping the \u0060IN\u0060 expressions into multiple equality comparisons \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/expressions/case/literal_lookup_table/mod.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"476be9de13e5fb145d5b409bf4ce48634f234272063e4c40a7c32dc6eed3b34f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We expect nodes a@0 and b@1 to be pruned, and intervals to be provided from the a@0 \u002B b@1 node. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/intervals/cp_solver.rs"},"region":{"startLine":1408}}}],"partialFingerprints":{"codehealthFindingId/v1":"be7260d4e76cc9f732a47d351dbaba3b8c9c529cb947dfcef4efeb9b74f0d180"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: for above case, we can infer a IN (2) AND b IN (3) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/utils/guarantee.rs"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"49ec29e5d3390793510d5bc98ed29a281efec1ec560b2447a6226ba024ba688b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be \u0060a IN (\u0022good\u0022) AND b IN (1)\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/utils/guarantee.rs"},"region":{"startLine":983}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab44d9ee8dd34ea2ecd56c9920a911472b048d3dddb4df3a2cccf46c38d2ba1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be \u0060a IN (\u0022foo\u0022, \u0022good\u0022)\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-expr/src/utils/guarantee.rs"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0a27da1930e945917305213f03169fdd4e49268ceb04f9ee3a4554d3b3f089a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: \u0060try_embed_to_hash_join\u0060 in the ProjectionPushdown rule would be block by the CoalesceBatches, so add it before CoalesceBatches. Maybe optimize it in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/optimizer.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"54e4632f3d1df3f05f7275bd0e9f67fca324b5b714657a1f892e61b83318ff04"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We need some performance test for Right Semi/Right Join swap to Left Semi/Left Join in case that the right side is smaller but not much smaller. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/join_selection.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"c84c478851959449d4f3a14271a0fe96b2aa89ae9d5993d5b9f954159d1c122d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: In PrestoSQL, the optimizer flips join sides only if one side is much smaller than the other by more than SIZE_DIFFERENCE_THRESHOLD times, by default is 8 times. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/join_selection.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ca346dda0505151b2561faa556feeb5d860846c4471487a7517800290ef47f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: by calling \u0060handle_child_pushdown_result\u0060 we are assuming that the \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/filter_pushdown.rs"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e1e239a43faf8ed79dbcc5e60eba46c5b84ac9221dd3ad76efb2bd4081ec0e2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we need all aggr_expr to be resolved (cf TODO fullres) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/aggregate_statistics.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"a83b750fb4a150aa7539fcd1c42fe67a62be70e17f80015fc5c35ddc942b5f8f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO fullres: use statistics even if not all aggr_expr could be resolved \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/aggregate_statistics.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"29d27d3d22f4633e03041dc791d767461b0dcf1322bc8acd15878f747cca1d03"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle the case where a prefix of the ordering comes from the left \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":900}}}],"partialFingerprints":{"codehealthFindingId/v1":"628fdea4094546eccf16efb533141a7d095cadad1babd1302fcf588ef62c7198"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle the case where we can push down to both sides. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-optimizer/src/ensure_requirements/enforce_sorting/sort_pushdown.rs"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"834dfda13afdf7c3c9ac5c7c42a6d74e1a583445d83e0ee854adda2e68347d0d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: it would be better to apply it as soon as possible and not only here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/work_table.rs"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"5102333f92013e369bfa0cf52054a453d7ed32405aa277e5cbf5a6cfe9206681"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: an aggressive projection makes the memory reservation smaller, even if we do not edit it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/work_table.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"c91b66aa790f64c52ab9f7ec6a519fa5fdb4e62e762e27de860a5e611ed10ec8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Consider overlapping computation of the subqueries with evaluating the \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/scalar_subquery.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"0513e4b96c0e6c07a1e335fc9edb0671acbad4d24420a52b585d840a44581afb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: It\u0027s never used. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/render_tree.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"08978444dd6a0b43498b9fbc4f1a137f6862cb3e9dc8d19d37c2bce8f87ec413"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: control these hints and see whether we can \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/recursive_query.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aa52ee873906d74501408905dd73490cd5b64666cc3bd594dba64fa2de8282d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we might be able to handle multiple partitions in the future. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/recursive_query.rs"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"f818ee2c22cdbf3a5e8a7fd0332dc562620770df7125d73f7ae06e0fe8dde6dd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: remove batch_size, add one line per generator \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/memory.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d40cfbcaf0cd6fc757a32e5c50f2fccd6e8b1052026991c13b385dd9120e92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ///     todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/execution_plan.rs"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9f450e06f7e8ce347c048be54f1f67414a89b43365eef6a71c95c1236b64aa4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ///     todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/execution_plan.rs"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"44bdc93c23f8374fb4d297b5e5e030fee0bd5825537bd584fdcce2584596979b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Replace with [join_next_with_id](https://docs.rs/tokio/latest/tokio/task/struct.JoinSet.html#method.join_next_with_id"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/execution_plan.rs"},"region":{"startLine":1841}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8f64a2cb762253f0c7f0fb76f910f38c1a919af8d7cc5efd19691279f33393d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make these variables configurable. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/display.rs"},"region":{"startLine":987}}}],"partialFingerprints":{"codehealthFindingId/v1":"363a39ef9d8850b29d711b365484c38e2aedc6ff38cddbd56595ab1c262a3ad3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO is there a more elegant way to overload cooperative \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/coop.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"190590a1be4c078e6b1af9896e155d33f137fe39e826fc5a1a91c66a2325c26d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Track \u0060elapsed_compute\u0060 in \u0060BaselineMetrics\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/async_func.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ae2011e042794cce007ca9160c4c3500788bda4f03bf9cbb8a166d4feaae677"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO use some sort of enum rather than strings? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/analyze.rs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cca0cbebca2b73007872a94528e8501a17b63ad6b38a98965f4fa6abf12db66"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make this more sophisticated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/analyze.rs"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"76b68dca4820e77dee9d7a8525d50842ed95e8ac61f1fe576aee46525cb558b9"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: Technically, fully ordered aggregate is a non-spillable \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/ordered_final_stream.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a1b6be5cdd90eb2172ba2f0e7a11314b59fb32c220ceebe2f12d9f99d2ff4ea"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Emission type and boundedness information can be enhanced here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1546}}}],"partialFingerprints":{"codehealthFindingId/v1":"28400681bc4148df6de2992dca6c9463632da81e0f221d9057c7d2e1afb963e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Emission type and boundedness information can be enhanced here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/window_agg_exec.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c9ff5b1238483a7c4251c8c29640cdf2c597b314341867047ff5d4167cd1c67"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Emission type and boundedness information can be enhanced here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de05ec70a61efabebb8730ea2e9bafc1bafe5c908255c4d651f48979d65ece5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO stats: group expressions: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1630}}}],"partialFingerprints":{"codehealthFindingId/v1":"45004e6354fb6c8bdda0d337094a3958b8089b6d185c712cc6924fc0ab88c3d4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO stats: aggr expression: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1633}}}],"partialFingerprints":{"codehealthFindingId/v1":"eac2362c923b1369ed2ae2273e56c8d4eb8a9f36898f851450f783aece4723d1"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK: Should check the function type more precisely \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1918}}}],"partialFingerprints":{"codehealthFindingId/v1":"dede7df5cb794cd30543c417951d78959d7fe227640c4b0530c4d5a150b165b8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Derive safe predicates for expressions such as \u0060min(col \u002B literal)\u0060. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1941}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b9f1384eb15e52d90225f8e0b2db958da6663bc78142fe5c3f1dbf149280e58"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check if we get Null handling correct \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/aggregate_stream.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca703da3e24b9276c206b3442a298a86e10e09d1717b5d0abfa2851c86d95784"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Make this a member function \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/aggregate_stream.rs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5b2456b815b4f39863460f00ff9c57d03529ee8278ecb05f9fe3fac2768d2dc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO file some ticket in arrow-rs to make this more efficient? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/row.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8b3036856c4cd541c6c1400c5da75fbcc65488f4f9ff98b1e24a6ba4b14f599"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Materialize dictionaries in group keys \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/row.rs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"779487149335eaab9567ceb6217ab5355991d96f8b9b673566709e5dde3739a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Materialize dictionaries in group keys \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/row.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5ae50bd9b95eee9473fccde34318652dfd3c8fddb42e51bb248d2b27a393d2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: it would be great to use something like \u0060set_bits\u0060 from arrow here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/null_builder.rs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9332944bef5456a558a08c8441f1e61b4d61a3e7dcbbcbf7f2415f55066ae3b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: this guard works around \u003Chttps://github.com/apache/arrow-rs/issues/10413\u003E"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/row_backed.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5645e006a29af6754e018b58a31acc670ff1b0e47223a9bec8dce810029bb38"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: mirror the arrow-rs efficiency TODO in \u0060GroupValuesRows::emit\u0060. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/row_backed.rs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"91b772e0b285d38050244bb3be86784f516906e2603877c47a43ba1af24148a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Current approach copy the remaining and truncate the original one \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes.rs"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"c636286b94fd0a296f040a35319cb3583173548b4e45593e78860ac05162a0b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Remove unnecessary \u0060input_schema\u0060 parameter. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/order/partial.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"33a9214e07ac54c2c89c0ccd694d004df225fd49fc324ef9d8d885b0b447461d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: switch to using [HashTable::allocation_size] when available after upgrading hashbrown to 0.15 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/stream_join_utils.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8273e1a79b05301ec256446c50d99471c8b22f7b280c11f11c76420de670168"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: currently if there is projection in NestedLoopJoinExec, we can\u0027t push down projection to left or right input. Maybe we can pushdown the mixed projection later. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebf328975029ace35f0b3cb85854444eb15455ba8cd4b3eaf824464d50f465c2"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // HACK for the doc test in https://github.com/apache/datafusion/blob/main/datafusion/core/src/dataframe/mod.rs#L1265 \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3080}}}],"partialFingerprints":{"codehealthFindingId/v1":"52590094dc43ab10893a8206e7f476ead5f8ebf4980f916d701bafe36693bae1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(perf): since the output might be projection of right batch, this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3722}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a99102173bf0de2755cb4857a566bd5e0540de7af68b5460a286fcf6d33eb53"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack: If the left schema is not nullable, the full join result \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":3920}}}],"partialFingerprints":{"codehealthFindingId/v1":"00726726a34e098ade7520151b8ef379aac6a01d855a4cd73cd5b60220f8a8b4"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hack to deal with the borrow checker \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/nested_loop_join.rs"},"region":{"startLine":4000}}}],"partialFingerprints":{"codehealthFindingId/v1":"590e3b5d1471b346ac57044ce12c5949487c446a3b12b77ee24977165663e595"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check equivalence properties of cross join, it may preserve \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/cross_join.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5378f76d6282d5537f0135bb7f3d73cbc45263fa26e2dec48e187f94e4e483e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Optimize the cross join implementation to generate M * N \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/cross_join.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"dffded55bf2a0b5624f671a4d8f3a496f86cfcec1fb5c66ce668126dc59b8166"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: optimize equal_rows_arr to avoid allocation of intermediate arrays \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/stream.rs"},"region":{"startLine":493}}}],"partialFingerprints":{"codehealthFindingId/v1":"62562aaf3b61718569826276397dff04eec8db887dfb574efb953f310b44e11a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: include the link to the Dynamic Filter blog post. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/shared_bounds.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f1ceb947986a66f2babb374439fd6dbd03f80e50f8c30723637f464099df3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: rename to MapLookupExpr \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/partitioned_hash_eval.rs"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e34b21f6f0cf90f2f95c69694756c60fcb9eab0ddf73b6eb5b3fa2d757b53c1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support create ArrayMap\u003Cu64\u003E \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fa65b5da65c13f13f4c722e3d734da72723359fea50d3d1dbde938b949965e3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: currently if there is projection in HashJoinExec, we can\u0027t push down projection to left or right input. Maybe we can pushdown the mixed projection later. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/hash_join/exec.rs"},"region":{"startLine":1917}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9a3edf587cefe9679823eea42a9cd0d0dc8af2e3bafeb1bbcc7c62140d4db83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add input order. Now they\u0027re all \u0060false\u0060 indicating it will not maintain the input order. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/piecewise_merge_join/exec.rs"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"771706c522c8888dd244c02f5d11714ab98f657aee54b0f5c285f47f55d163cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/piecewise_merge_join/exec.rs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cae32d5ef10f8243ee838c1cb5b8b5b002529b443fac974623058c5dbb08573"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Spill join arrays (https://github.com/apache/datafusion/pull/17429)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/materializing_stream.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3e258bd94cde5e858dbde69acb2fefd70c4aab01c07d3729675e87a620fb827"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: sort merge support for right mark (tracked here: https://github.com/apache/datafusion/issues/16226)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/exec.rs"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"4762a57b30d7e48205bd175d729891b84215e94244aa26acbeaf2f68b34f1f64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO stats: it is not possible in general to know the output size of joins \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/joins/sort_merge_join/exec.rs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"37549a2b409a31efb1a69b6a0e44fd0b9c49a33d9235488b9894d83f356ecc12"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: pass filter.expression_analyzer_registry() once #21122 lands"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/operator_statistics/mod.rs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f370c43e54535b348743763cc836c163eb5afb271c5eab32b8dd8ebbe6cdf9b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: pass proj.expression_analyzer_registry() once #21122 lands,"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/operator_statistics/mod.rs"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"816401c3dfa96985bc8e899db5978997dbef88bd00bd202bce4c860afdd35ffd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make a builder or some other nicer API to avoid the \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/sort.rs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe5b56495bea36774767e153d49d93ebe3e0a974b98e12ab432e9520345f41e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO support range partitioning and OrderedDistribution. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/sort.rs"},"region":{"startLine":1355}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4d686cb4d8314e4a4c446d9dc56210864ae9eb8f22b6d5ac86e28971895ef04"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - add a threshold for number of files to disk even if empty and reading from disk so \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"2557843f8007b960b7a8c28c2f9f90aba59ae0752460b4e412dfda19ba0ae590"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - We can write to disk before reading it back to avoid having multiple streams in memory \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"209f697d054107ae7d69ff310e88d67703c60879038f0245252d99e75102f65f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - avoid this hack as this can be broken easily when \u0060SortPreservingMergeStream\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/sorts/multi_level_merge.rs"},"region":{"startLine":550}}}],"partialFingerprints":{"codehealthFindingId/v1":"da8b1def1623f4c8a690e9e375e61fc34af82484cf3714c4723ab52078bf173d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: make a builder or some other nicer API \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"0464fa6708013584fb5e92ab00b863062f259d724adbf31a0313a7c22931c199"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO there is potential to add special cases for single column sort fields \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"827f66e3450c1f36e1f764f37bffb4c327017b9f72f2d6e36172842f64370bc2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO PartialOrd is not consistent with PartialEq; PartialOrd contract is violated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/topk/mod.rs"},"region":{"startLine":1157}}}],"partialFingerprints":{"codehealthFindingId/v1":"c53dcf4bdbcb80e89fb641e7b1d3b9a65560436df0cabb1726ff7310b7f711b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO stats: some windowing function will maintain invariants such as min, max... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/window_agg_exec.rs"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a207ca4cd627928528ca6bb2cb4fc852f1e79d3e63f6a4aac8849280ad63dae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO stats: some windowing function will maintain invariants such as min, max... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/bounded_window_agg_exec.rs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a18c0a059aa9d17de1e88f662dfde758a2987149531a71ea9de9ea19a015500"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove extended_schema if functions are all UDAF \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/windows/proto.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"63e7dca81b7d14cf91634a0c4fc9dedbfaff5817fd352996de4a3e26eba1ba11"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove extended_schema if functions are all UDAF \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/from_proto.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf6f119c7d5536cf8eb1bc58f0946e6a1ae54886e9c779d17afde3b7645d4786"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO! This is a placeholder for now and needs to be implemented for real. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/file_formats.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"41bc9f94e6c9fbc65e43c0f392127560fe17e9352cab508441d88d1a915ea4f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO! This is a placeholder for now and needs to be implemented for real. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/file_formats.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1084a52efbb2f75d026bbb40191e87825370fdee046d5ae46f79d97f820738f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO! This is a placeholder for now and needs to be implemented for real. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/file_formats.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"2538692f211f428d650b207b387043c1c36e33993e8eb3b2332274d83da7e4cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO! This is a placeholder for now and needs to be implemented for real. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/file_formats.rs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0fa6ad3be5974433202811846689e5e7524179c0bdf513483689017ffc5fb91"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO! This is a placeholder for now and needs to be implemented for real. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/file_formats.rs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"c91ae16ab17cfa8e1e66516c9672c6e9e3082f01207c2e533002994923c960e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Revisit this workaround once the Arrow dependency includes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/string_in_list.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b1c41265a0045826363530d081249940eced766569c5ea92ba0a71c3a83cc3e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Handle ILIKE perhaps by making the min lowercase and max uppercase \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":2179}}}],"partialFingerprints":{"codehealthFindingId/v1":"8908e50b3187e163bc8ef0462a2f7ad55711c8f2f509cc26a47531b25c9c5aeb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add test for other case and op \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":6698}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4d0e384de33cfa963cf2baa90bd0ac6e609c4f8b3a6f1d80622a0a91eee55b4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add other negative test for other case and op \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":6795}}}],"partialFingerprints":{"codehealthFindingId/v1":"f59ed109339dfa381c797e2441a6ffeb5b2131ba7576769a6ed8d09a450883f8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO refactor other tests to use this to reduce boiler plate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/pruning/src/pruning_predicate.rs"},"region":{"startLine":7237}}}],"partialFingerprints":{"codehealthFindingId/v1":"985ffc22cd483e25636fe9977e6d04ab7650ae428b00f032287aac4d70775924"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ///         todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/session/src/table.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"1489fb5780a8fa6cb8fa083cc9c072d1159e24aa4ea05e02ae225c46e1228516"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: https://github.com/apache/spark/tree/master/common/utils/src/main/resources/error"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/error_utils.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f2bc9a4b2fd620917a0ea87a3786740f6213bf680d6e04ba862fb18be70bd75"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: try use something like datafusion_functions_aggregate::create_func!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/aggregate/mod.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"25569c4e9cfe2ce40832ea32e92a995ad513f86d9a56ab70a3a4a63575c467e5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: see if can deduplicate with DF version \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/aggregate/avg.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ddd2a11cbd29b42d3d49b3a2fb6fb74817d481923f1890f71f1fbff879c923"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if spark.sql.ansi.enabled is false, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/next_day.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"66d083bb9ac5dc4db148684079acccce39a814f3069a9b24cc4e31eb2f32f8f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if spark.sql.ansi.enabled is false, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/next_day.rs"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"53f3d4a8a566bfcd551eb702d26b1cdd33f1f1b07dc54f0f13fed3e8834b4faa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if spark.sql.ansi.enabled is false, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/next_day.rs"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b3879ccdab76583b636c2855da627da9e6badd3d9eaf158e05190df25679a9b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if spark.sql.ansi.enabled is false, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/next_day.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"84ebf779778d4a3c36643223cee98774be915e8027ae5e8368770971cbb61779"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: if spark.sql.ansi.enabled is false, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/next_day.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"6850beff6e39ead497e689849e8548c7b57509643bb40c20f6c44e66f77ffc42"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add once ANSI support is added: \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/datetime/mod.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dace1486366982470d238afc5ec5d2c23fb7f699d5e90b8b7d7071f6612cdfc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: wire both configs so Spark 4.0 behavior can be selected at runtime. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/spark/src/function/string/encode.rs"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8bec3913c07171c585d9dd831c0282aaddb54f372ee5fb00537b625a198409"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This can be resolved after this issue is resolved: https://github.com/apache/datafusion/issues/10102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/utils.rs"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"d42f159cde896a18b44befa1061abff540b1f74cf8f384b443740a42cbec8c57"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: It might be better to return an error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"319682432b0e30defd8d72a1c07601dcb0e42431f40a42731c4ac8c94acb11d8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support multiple tables in UPDATE SET FROM \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/statement.rs"},"region":{"startLine":1186}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c1dc4ae23fd11c2944d3cd5845b2cfe41e820ed9da723917e2108f600ea15cb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Change sql parser to take in \u0060or_replace: bool\u0060 inside parse_create() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/parser.rs"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d93776ad6f096efdbc98830e5312f38f107e25240909b0f4e62b3c93de4489e"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This branch is shared by params from PREPARE and CREATE FUNCTION, but \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/value.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"c051124d142ee598be6b660e3bb53b82cded3227b1f494b1938e6888a80e1c8c"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: In the CREATE FUNCTION branch, param_type = None should raise an error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/value.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"98e77e921a9d05c94a19806bb2751867cf5e8681ef70a90595084a2310340704"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: figure out if ScalarVariables should be insensitive. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/identifier.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"36775856f06bfc8e94d77db9dd35e23246a8159ccd26fafe77ad30af6b7d674a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this when we have support for nested identifiers for OuterReferenceColumn \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/expr/identifier.rs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"7524d6f84f1b5309472b615208d62d2fc1b188a5651a6da6f4d417a659ae34ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unparsing wildcard addition options \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cff59d959d78c5384400ee33126a0d3536712968339d098c77ebbbf865a4c08"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support for the construct and access functions of the \u0060map\u0060 type \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/src/unparser/expr.rs"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"de6e6bf5203c42b812d48045d7383099d9ae1feb1a884420694e5b467170d5ac"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: add test for having in execution \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/tests/sql_integration.rs"},"region":{"startLine":1334}}}],"partialFingerprints":{"codehealthFindingId/v1":"97e03717ccc88d36b5affa9140e61135b41a288445967ce0b6f1d50ca2baad68"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: /// FIXME: for now we are not detecting prefix of sorting keys in order to re-arrange with global \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/tests/sql_integration.rs"},"region":{"startLine":3655}}}],"partialFingerprints":{"codehealthFindingId/v1":"779db6f123e3845f62915db16969f2091ae54836bdba813561c51def5bb877e9"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: /// FIXME: for now we are not detecting prefix of sorting keys in order to save one sort exec phase \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/tests/sql_integration.rs"},"region":{"startLine":3758}}}],"partialFingerprints":{"codehealthFindingId/v1":"a423b89f7b16eafdcb9459ac4a0a3df4401193cd6263675d6a16914544dd5c88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this sql should be parsed as join after \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sql/tests/sql_integration.rs"},"region":{"startLine":4996}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3bf0f6b294147291b35b1c1b1e9f67d44845d18ebbb193be6f3468ae633afc3"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: // Hacky way to  find the \u0027filename\u0027 in the statement \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/sqllogictest/src/engines/postgres_engine/mod.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"9afac7608ba8e867a03342fc3ad2077571107b35c0e69fe83404d1946c3bc0e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //! TODO: Definitions here are not the final form. All the non-system-preferred variations will be defined \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/variation_const.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"c16df9cc2ade679190e2ae6542b3d2cf0647097b00deec0b4c74c3790c4c113e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Define as extensions: \u003Chttps://github.com/apache/datafusion/issues/11544\u003E"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/variation_const.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"fde1163d92f19e78b7adcd568b52847a82e07215bebb2f99fb23bf0233f55044"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: DF doesn\u0027t yet use extensions for type variations \u003Chttps://github.com/apache/datafusion/issues/11544\u003E"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/extensions.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"867f19744316b86b8405dec4ae83c4a50f6502dd10c74420d969fbf34d70cb26"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: DF doesn\u0027t yet provide valid extensionUris \u003Chttps://github.com/apache/datafusion/issues/11545\u003E"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/extensions.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"726c79f75f54e8523a5864c8b522642661e74e0f25e6672943e39f9773f8c528"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Check nullability for List and Map fields. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/utils.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca10cb2a4bf9d63c81d9de822d8e6821d6b90e7b5a0402b7e1a93c10329040c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Add support for List/LargeList/FixedSizeList and Map fields. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/utils.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"cba47cc5443cd47735b467a5f8fb8be80eb31d043123b105608ddf2349243d6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove the code below once the producer has been updated \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/types.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6516e25ba2df999b9ebd3a7901fd031a8fcee12c77cd6809ce12f79a734fa43"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove these two methods \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/substrait_consumer.rs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ffd3e4ef2b4baf83c4e5ac5f8da37b1be1fdea8e3b09ff5b3c744602fd45489"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: currently does not support multiple local files \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/consumer/rel/read_rel.rs"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"44248b7fcca0b675010b7660f04e337a14eb86eade061d53336db305e81e2d5d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ///        todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/substrait_producer.rs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa3283ef62855333cf615be04630faed13daaf6de076cf63571f8296f6b1902"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ///        todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/substrait_producer.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"185c50f7df508fee879eb716a978fbea1a0603b8678249b622cab99452644e71"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support GROUPS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/expr/window_function.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"601ced3ff52dddcfaa29f35889325e52de37054ea30355a69ed4facd48aaa1d8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support range repartitioning in Substrait exchange output. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/rel/exchange_rel.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ac16814245105b1e19244e5a14c79b95263626667dd91c7bc39453cc48a0a6f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support range repartitioning in Substrait exchange output. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/logical_plan/producer/rel/exchange_rel.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d60e1d4a6d50a3db03970a4811fd32262e0c74dc9558a186242f4bb5439db5a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: duckdb doesn\u0027t set this field, keep it as default variant 0. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/physical_plan/producer.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"43ce5b2e90aa7b2ba8f2804bc2d70ea7b30f1fd739faa0b52cd1bda59eed35ba"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: duckdb sets this to None, but it\u0027s not clear why. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/physical_plan/producer.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"91767f6cf086a66cc84466f22086e60889c5666035de2340454091ee12d35e75"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: duckdb set this to true, but it\u0027s not clear why. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/physical_plan/producer.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"df5bada8e219ebf324c1e8370c1b3cc8ddf03bfa18e6ec0f386294eac3ced045"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO substrait plans do not have \u0060last_modified\u0060 or \u0060size\u0060 but \u0060ObjectMeta\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/src/physical_plan/consumer.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"9650d80d75f1750abfb5ee676a858e48cf6f72357fcf2059e5ae508d67a44c95"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: would be nice to have a struct inside the LargeList, but arrow_cast doesn\u0027t support that currently \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/tests/cases/roundtrip_logical_plan.rs"},"region":{"startLine":1948}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bb6d82701ca7275f59ba9e7cf8abcf02b7291ca8cade9478a937b070dfb2fd3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo use core array_transform when it supports multiple lambda parameters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/substrait/tests/cases/roundtrip_logical_plan.rs"},"region":{"startLine":2531}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b0b429d9ba5922c3c299393473991be74ab3edb3b704c3a527e1031ca1aadba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: constrain this range to valid dates if necessary \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test-utils/src/array_gen/random_data.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8106b7b21046a8aa63adfbf9ad40dbc111b51f52727bc08ff33d23b7cb36b74"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support generating more primitive arrays \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"test-utils/src/array_gen/primitive.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2a9288c3bfd7e5912ab24a7b7b0ca558e9a6d59141824efdb61488636c22626"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no installation or build instructions: The README states licensing, purpose, and limitations but provides no install/build or setup instructions. Add an Install section covering Cargo.toml configuration, linking to the FFI crate, and a minimal build/run example."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"725032fff3db2bea3e61492d5c4d3a2c6e70d573eec4886180a1ce4290d9f9c7"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no usage examples: The document begins with an overview but does not yet show how to run or use the crate. Add a short Usage section showing one or two concrete examples, such as calling a DataFusion function from this FFI crate."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/ffi/README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"812b39dda437c53901f43d5af2f108d55aeb3b5ea305cd95192c6d80c5ce9702"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent parameter naming and type for partition data. MemTable uses \u0060partitions: RecordBatch\u0060 (singular type, likely implying a single batch or a specific wrapper), while StreamingTable uses \u0060partitions: Arc\u0060 (generic Arc, likely wrapping a Vec or similar). This creates confusion about whether the API expects a single batch, a vector of batches, or an Arc-wrapped collection.: Standardize the partition parameter type. If both expect a collection of batches, use \u0060Vec\u003CRecordBatch\u003E\u0060 or \u0060Arc\u003CVec\u003CRecordBatch\u003E\u003E\u0060 consistently. If MemTable\u0027s \u0060RecordBatch\u0060 is a typo for a vector, fix it. Ensure the semantic meaning (single batch vs. multiple partitions) is clear and consistent. (signatures: MemTable.try_new(schema: SchemaRef, partitions: RecordBatch): Result | StreamingTable.try_new(schema: SchemaRef, partitions: Arc): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8e53053cecc3a381136f8857ea89801d4f23cc42b803131ab7a17180909fbfa5"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent naming convention for constructors. \u0060new\u0060 is used for a single path, while \u0060new_with_multi_paths\u0060 is used for multiple paths. This breaks the common Rust pattern where \u0060new\u0060 is the primary constructor and additional constructors are named \u0060new_\u003Cfeature\u003E\u0060 or similar, but here the distinction is between singular and plural paths. More importantly, the parameter name \u0060table_paths\u0060 in the second method is plural, while \u0060table_path\u0060 in the first is singular, which is good, but the method name \u0060new_with_multi_paths\u0060 is verbose compared to potential alternatives like \u0060new_from_paths\u0060.: Consider renaming \u0060new_with_multi_paths\u0060 to \u0060new_from_paths\u0060 or \u0060new_with_paths\u0060 for brevity and consistency with other \u0027new_with_\u0027 patterns if they exist. Alternatively, if \u0060new\u0060 is intended to be the only public constructor for simple cases, ensure the distinction is clear. The current naming is acceptable but slightly verbose. (signatures: ListingTableConfig.new(table_path: ListingTableUrl): Self | ListingTableConfig.new_with_multi_paths(table_paths: ListingTableUrl): Self)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"53102e3cebad27de71910c83910eff812849d10703384d9c9f16d9a580249944"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent parameter type handling. \u0060with_file_extension\u0060 takes \u0060impl Into\u003CString\u003E\u0060, while \u0060with_file_extension_opt\u0060 takes a generic \u0060S\u0060 (likely \u0060Option\u003CS\u003E\u0060 or similar, though the signature is truncated, the name suggests an optional variant). If \u0060S\u0060 is \u0060Option\u003CString\u003E\u0060, the inconsistency is in the type system usage (converting to String vs. handling Option). If \u0060S\u0060 is a different type, it\u0027s a clear inconsistency.: Ensure both methods handle the input type consistently. If one accepts \u0060impl Into\u003CString\u003E\u0060 and the other accepts \u0060Option\u003CString\u003E\u0060, consider if the optional variant should also accept \u0060impl Into\u003CString\u003E\u0060 and wrap it in \u0060Some\u0060, or if the non-optional variant should accept \u0060Option\u003CString\u003E\u0060 and panic/return error if None. Standardize on one approach for optional vs. required parameters. (signatures: ListingOptions.with_file_extension(file_extension: impl Into\u003CString\u003E): Self | ListingOptions.with_file_extension_opt(file_extension: S): Self)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"9a24c36dec2a392b9282b0f7c0a397187439677d857e7f01996a004396adc27f"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 8 of 46 project(s) overshoot their size bounds, lowering Project Cohesion to 6.5/10. The most over is \u0060datafusion/physical-plan\u0060 (150676 LoC, 281 public types across 20 directories). Review these for cohesion \u2014 draw the boundary inside the module first (group each responsibility into its own package or directory and keep the cross-boundary members non-public), since splitting a published package moves types between packages and breaks consumers."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a94650dc74886a0f1f08eb9fb6775f1fc395279ef7e901c970c9d26f767a72"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"37865df0f97139333d514762b2c65479b3bae575b5ad96a70aa12d8dbe1cf7fc"},"properties":{"commitSha":"b6c760ba21f1038e47bcb0fa05a083b851bf3d6b"}},{"ruleId":"D28","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a2248d3eb62ff05ec0287485693c1aabdfcbd0283b927b689ffd0d58bf2ea2a6"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fbcd92f90a30661a7b47a7dce524210fdb7058e1a4a50389ac76bdcb33a17d89"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"17191dc2b56e1f6ba2bc06ea4e18b89a16aeb23e126b650c9136e4c7081cad9c"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5b8f11381d61a58459ffc7c595fd52d09c03c711894a63a9578043d2338412b"},"taxa":[{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4506f9c6f729c9dc906f7c0b0603fe6841a423633304f4667288e0b68ba31541"},"taxa":[{"id":"CWE-807","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"646ce2e7d5dedff469d15da929c5ac9ffa59cfb85f360c0c27e1ae7f64de7868"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4a8ef8e048703eb5c706c9113ed0fe756eabba81df4ba572e669ebb19d2d17e2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"de78c66291369eccf94d359ec0c66ce05c2b90c1ce54745bc8aa1eb34a5e2677"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3a3efe8f1a44e60185a2bb3148b65be023b46cd455d5408328fe64dcb3d34eec"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"63d0b308a81f7322b0779e12a8cff6340177a75d82b9b9a33f36061bfac10e9e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cf737791f98cac9025f32dce164e5cf3c436dc8a4bdee97838cddc25d74007c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"50a00d38486a6fda3ee3a28182e7c19ac67daff6e75bef1ce85e461a68ca560b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"00eb8e325b6495b76b75cd419c0dd9cd5a514156f5b697d0cef95ae95dc6cf10"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fa5e08dfb12268c1bb77faa67b08915d59a93ab42ab0097703f3f957b5e8b84d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fbf5c37cd914a6b2d366bbabff06f341cdd53403247e4c0221a56950f2f561c3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a86e984080b998513aa94590e1abca42a3735f13fda3cfe493cf6ba858534acc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"20dfe8f80f58f394eb33ebeebd56f052be2850e771f6181cfd0e84cc1225b8a6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0cba50498c54fae1d8487858a979d2db85db51f160776d777a7eb3041e5b4342"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b217379f43fc4d19891b1692098a724011b059013dbb4a18bb713ccdbf99708b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2c8a4c4240792f420145254fa068646feadcc975c4ef02c91d72b209c3205322"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bf0b8358b4446fd4988f0acf2a197e4e87c602185d4732e6421272da9c8d3007"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4e73369d2b7a691eec077dbf4c2d19083d2374750aa715f34f154ac03bffddea"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"03eb398cfc5db1f7288c4597f1482bd65a6d5f8285bfd5132e4196372125863b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6235cdd9606a6268e89d9968388b2c244c765e0d81b6aa2ab4db82c3439b7d0a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"30dc7b144123e7cddead29d5c90d2a1f35fc128ad8ea69860fcc844a8d2d6bfd"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c319e540b518cfee469a18d32b73e08b84bb5e75e5b436af572c82c6b1625000"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4a7dad6a225314f35dc26e15cf4abd5597e55d469a4981a2b6b32a21e08dcac2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"aeff9a24a864bc444269feae78bc00f80b6c39772764c70cc78062b0cf8094bf"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"19fa1259e75355c919147287bfa06e00fbc18a44feacc76de95b39091d077756"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6baeb9d28d28027495122767632ca979d47df38917d6ccc49a070e9246d9c048"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1d34d1d7ec94a8d459cf366de7e76399107ebbc87a6e0b7c8b1c3f020990b447"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7bcd9be6a08c2b440fdd10a4acf372933af608b7ce17f5c8489cbb9f52fe0009"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"99ea4dfa6d410a921f743e6d294eee36df39456491db3ff6bdf570b1be78cd44"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"53b48f87378ec769d5b9712f10bdd6f4fd6771c8d613656afaccc6d12a213389"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"afd5536ee0bcc155c98caee709f7eb41e6d0cbe80ea1483225380db67c749332"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a50bf425751fec361d3323f5f57757a2ea41f59b8abe160d530fc7ca88f222c3"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"af2e6c71975637b8262c391fe4e3404950c20ea81d252dd2b046399acb91005c"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"090ce15e1b8ffdff00e33f96b22b0d2a3d71aecd1a65cbab63939f3c1c1e5774"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0c0fee30a995b0e18b19e6db661dcad393f11d0f24b29a6669803e8e51de38ed"},"taxa":[{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6674670e887caf942fa2bf2c2bd6db4fcd2cf079417a4d19f61291974ca95356"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"26952fc5a8d0a7cace410b601383d73271988d35819d5ad887e753ac078d1ff7"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ed9e640a53004c86036b30116d645e0975579d488e3c29fe30a96cc00ad8d3e6"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"db23259e7a884b8c68aa73dd95bd1df87a9e9ff6ab664c95f588e59b978997ef"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b60ec6b2fd9097e51d9074ed1edc017c0435a181b911a8f6b4b11c4cd0ff0606"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"86c4c16241de82516af63e1148cf7cac23b3d09f0b90fcad271e2ad01f9ce684"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"109f1893f117dbc09be51aa6266f41c2cb2a6aa1876c3fda2b3d928f63b952f4"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"027bf8359a4fd4a9b897d5196935269294b0398a65235db030f4a596ac26199d"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7d978796cf969434740eed2122c3359d76293c7339801ec022be275a0c001df1"},"taxa":[{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"618ada18c3d68437a334a27e7f776e7ccff356f83a3209b04596f85234a53737"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"35394d5a011643d921b5a79b0a127dd998ef43b39c4869f980e8684a5bc21423"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f83f21a2680a0d821d63abf3dc0bd2d667961223d00aab9176d75ffe3e173e3e"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e52a244d419752cbbb977911de76652f5804679e2d5a1dd372eee5fa11d9cde5"},"taxa":[{"id":"CWE-1104","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-1352","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4738d0215bcb6cee8cf6f53785b07352621b7491b0871e0909f7edb588f4f3cf"},"taxa":[{"id":"CWE-611","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5e7bf29ffdbb3cb26cf287cbe688ff76bf0a7e7b3b97827fdde35f19dca1526b"},"taxa":[{"id":"CWE-611","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4cc935eee7d71dd27f92a2ce9e004dacbd599d091b3f6386981d047162539806"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f49ee48fd6e37511d2c2a456cbf16d67aba685915073b2b655a14db7e0fc43b9"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5b00f6cb508e94f7c94dcd2bcd62148c1229672c3d682161d5b5edde0edf3e7b"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2ca8dd5f08fc78248de9532f4c748f14dbe458a8d50db1cd5d01cff6d8dbfa7a"},"properties":{"dependency":{"package":"qs","version":"6.15.3","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b8e2760214db857e91b5a3c80c54b933f75a20f9a8b69bd62c49a8fd4a283339"},"properties":{"dependency":{"package":"bitmaps","version":"2.1.0","advisory":"RUSTSEC-2026-0247","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"331c58e1352c5e36a38d1bafc0ea5e84628a7964efb04096ae98efa5bdff1b18"},"properties":{"dependency":{"package":"im-rc","version":"15.1.0","advisory":"RUSTSEC-2026-0250","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2bd9c4ac05533ae9bdaa289bd59021939d14f7f7dee13a829723bd4473f315e4"},"properties":{"dependency":{"package":"sized-chunks","version":"0.6.5","advisory":"RUSTSEC-2026-0251","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4c7beaf84cafa9e0cedc4277e0124c40e9466f16d179acf0725118b93bf29ffd"},"properties":{"dependency":{"package":"sized-chunks","version":"0.6.5","advisory":"RUSTSEC-2026-0255","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7737dee8de5a5f04a21569d166134246e3a1c923245d7110d4022bc605be03ce"},"properties":{"dependency":{"package":"faster-hex","version":"0.10.0","advisory":"RUSTSEC-2026-0306","reachability":{"kind":"unknown"}}}},{"ruleId":"D30","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"22c83ba4fc8bb777b63c87c99a755cd50469c75c7e9be2ed03a96e769d562df6"},"properties":{"dependency":{"package":"click","version":"8.3.1","advisory":"PYSEC-2026-2132","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"061f734a696c8aa759fb51603ad3d203a82a53816b296255310573aefab727a0"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"935b9e27d1ff6bbb66a67f4e9358358da1517e07678644dbfae6ad5c51f0f0d7"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d17adc5b5ca9b6877afd1752fc924c2155295ca05eb20a374c7c061e1603dbf4"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3adeb5ca433f8377e0513466abe226661632e2c7a65ab03d48b79033987746ab"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3b1568673c97a5ce9b1ec5a08dba083d705b7ca92047378b6f33333438b27491"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c8be28dfbddd65a7e332ce01235313147b1c55561e3694aa8941a467a4d640f3"}},{"ruleId":"D34","level":"note","message":{"text":"Orphaned files with no living knowledge: 34 of 1096 analysed file(s) have no living knowledge left \u2014 their last meaningful change has decayed away, so if one breaks, no one currently understands it (counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 1096 of the 1246 production source files in this repository met that bar). None is large enough to earn a read-through of its own, so this row stands in for the per-file rows rather than raising one each \u2014 most significant first: dev/create_license.py, datafusion/common/src/rounding.rs, benchmarks/src/imdb/mod.rs, datafusion/spark/src/function/datetime/to_utc_timestamp.rs, datafusion/common/src/spans.rs, datafusion/spark/src/function/string/space.rs, datafusion/physical-plan/src/render_tree.rs, datafusion/spark/src/function/datetime/from_utc_timestamp.rs (and 26 more). Attach the read to the next change that touches one of them: have a second person review that change, and leave behind a short comment or test recording what the file is for, so the knowledge comes back at the cost of a change you were making anyway."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling clique: btrim.rs, ltrim.rs, rtrim.rs: 3 files \u2014 \u0060datafusion/functions/src/string/btrim.rs\u0060, \u0060datafusion/functions/src/string/ltrim.rs\u0060, \u0060datafusion/functions/src/string/rtrim.rs\u0060 \u2014 all change together with no explicit dependency: a fully-connected co-change clique, not 3 separate couplings. They share one concern (thin parallel siblings over a common abstraction), so extract the shared part into ONE unit and the whole clique\u0027s coupling clears at once \u2014 you do not need to break each pair individually."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions/src/string/btrim.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bf63984ae8024f358a46b9a9564acfde064c8f9eb6877352233aa14201c1f65"}},{"ruleId":"D35","level":"warning","message":{"text":"Change-coupling hub: from_proto.rs \u2192 aggregates.rs, tree_node.rs, mod.rs, to_proto.rs: \u0060datafusion/proto/src/logical_plan/from_proto.rs\u0060 changes together with 4 other files \u2014 \u0060datafusion/expr-common/src/type_coercion/aggregates.rs\u0060, \u0060datafusion/expr/src/tree_node.rs\u0060, \u0060datafusion/functions/src/math/mod.rs\u0060, \u0060datafusion/proto/src/logical_plan/to_proto.rs\u0060 \u2014 none of which declares a dependency on it: one file is the hub of 4 separate couplings, not 4 unrelated pairs. Read the hub first: if the others each duplicate a part of what it does, the shared concern belongs in ONE unit and extracting it clears every edge at once; if the hub is a registry, dispatcher or barrel that must name each of them, the coupling is structural and the question is whether that list can be discovered instead of enumerated. Fixing the hub is one change; breaking the couplings one pair at a time is 4."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/from_proto.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bd35b8311a230203095defac644758491becf10e03f08cfe10f0f103d7aaf73"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: csv.rs \u2194 json.rs: \u0060datafusion/core/src/datasource/file_format/csv.rs\u0060 and \u0060datafusion/core/src/datasource/file_format/json.rs\u0060 change together 75% of the time (21 of the 28 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 21 shared commits counted here, the most recent 3 are \u00602ac032b4\u0060 fix: emit empty RecordBatch for empty file writes (#19370); \u006033be09ad\u0060 Revert \u0022fix: create file for empty stream\u0022 (#16682); \u00604084894e\u0060 fix: create file for empty stream (#16342) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/file_format/csv.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4922ded148f23da5cefba54c0be621ede3f5bc6c070c25f365dcafb0e2d9fdf"}},{"ruleId":"D35","level":"warning","message":{"text":"Change-coupling hub: to_proto.rs \u2192 aggregates.rs, tree_node.rs, mod.rs: \u0060datafusion/proto/src/logical_plan/to_proto.rs\u0060 changes together with 3 other files \u2014 \u0060datafusion/expr-common/src/type_coercion/aggregates.rs\u0060, \u0060datafusion/expr/src/tree_node.rs\u0060, \u0060datafusion/functions/src/math/mod.rs\u0060 \u2014 none of which declares a dependency on it: one file is the hub of 3 separate couplings, not 3 unrelated pairs. Read the hub first: if the others each duplicate a part of what it does, the shared concern belongs in ONE unit and extracting it clears every edge at once; if the hub is a registry, dispatcher or barrel that must name each of them, the coupling is structural and the question is whether that list can be discovered instead of enumerated. Fixing the hub is one change; breaking the couplings one pair at a time is 3."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/logical_plan/to_proto.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31358b7c0b08383ee86052380639689ca54ca92771a0fa11ff7e799fde697ad8"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: mod.rs \u2194 file_formats.rs: \u0060datafusion/proto-common/src/from_proto/mod.rs\u0060 and \u0060datafusion/proto/src/logical_plan/file_formats.rs\u0060 change together 70% of the time (26 of the 37 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 26 shared commits counted here, the most recent 3 are \u006054f5cf16\u0060 fix(proto): check integer conversions in common options and constrain\u2026; \u0060aa38d3c6\u0060 feat(pruning): expose pruning predicate IN-list rewrite size cap as a\u2026; \u0060c1366b55\u0060 chore: apply workspace lints to all crates (#24076) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/from_proto/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea46a8e15240c6e60d0431db5122687d4f0ff4aba7b72d8233220a7088a4ec6c"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: from_proto.rs \u2194 to_proto.rs: \u0060datafusion/proto/src/physical_plan/from_proto.rs\u0060 and \u0060datafusion/proto/src/physical_plan/to_proto.rs\u0060 change together 67% of the time (74 of the 110 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 74 shared commits counted here, the most recent 3 are \u0060041a7167\u0060 Restore the From / TryFrom proto conversions dropped since 54.1.0 (#2\u2026; \u0060abc5ce7e\u0060 Proto: migrate MemorySourceConfig to per-source try_to_proto / try_fr\u2026; \u0060e2e8e1c8\u0060 Add DataSource/FileSource proto hooks and FileScanConfig serde (#23683) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto/src/physical_plan/from_proto.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de365f0b1d1620d94e498cb62b228de7b271a70ac50b6877037f6a2a8e9dc321"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: mod.rs \u2194 file_formats.rs: \u0060datafusion/proto-common/src/to_proto/mod.rs\u0060 and \u0060datafusion/proto/src/logical_plan/file_formats.rs\u0060 change together 65% of the time (24 of the 37 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 24 shared commits counted here, the most recent 3 are \u0060aa38d3c6\u0060 feat(pruning): expose pruning predicate IN-list rewrite size cap as a\u2026; \u0060c1366b55\u0060 chore: apply workspace lints to all crates (#24076); \u006084bc8761\u0060 feat: add max_row_group_bytes option to ParquetOptions (#22649) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/proto-common/src/to_proto/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d511d0f6d5be47752075d04a3a654bdbd261d35d5d16ff4fb7caaca06c73f808"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: grouped_hash_stream.rs \u2194 grouped_topk_stream.rs: \u0060datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/grouped_topk_stream.rs\u0060 change together 64% of the time (7 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 7 shared commits counted here, the most recent 3 are \u00608a922816\u0060 Refine and document AggregateExec metrics (#24757); \u00609f73cf17\u0060 Add aggregate-specific metrics to legacy grouped hash and TopK (#24523); \u006012bd5b07\u0060 mem: Cleanup resources of done streams immediately (#22064) (at that commit the files were still \u0060datafusion/physical-plan/src/aggregates/row_hash.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/topk_stream.rs\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/grouped_hash_stream.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9ad03f78308b4c946b4f8239c5b57e9295d51acd1bfd7ed5755a6c5aead9d25"}},{"ruleId":"D35","level":"warning","message":{"text":"Change-coupling hub: external_aggr.rs \u2192 run.rs, sort_tpch.rs, run.rs: \u0060benchmarks/src/bin/external_aggr.rs\u0060 changes together with 3 other files \u2014 \u0060benchmarks/src/imdb/run.rs\u0060, \u0060benchmarks/src/sort_tpch.rs\u0060, \u0060benchmarks/src/tpch/run.rs\u0060 \u2014 none of which declares a dependency on it: one file is the hub of 3 separate couplings, not 3 unrelated pairs. Read the hub first: if the others each duplicate a part of what it does, the shared concern belongs in ONE unit and extracting it clears every edge at once; if the hub is a registry, dispatcher or barrel that must name each of them, the coupling is structural and the question is whether that list can be discovered instead of enumerated. Fixing the hub is one change; breaking the couplings one pair at a time is 3."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"benchmarks/src/bin/external_aggr.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e1d0e7fd420c5b8034d28585fce092beaf7d8d2f8bb4b24a8c7508c156d8882"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: expr_schema.rs \u2194 tree_node.rs: \u0060datafusion/expr/src/expr_schema.rs\u0060 and \u0060datafusion/expr/src/tree_node.rs\u0060 change together 61% of the time (31 of the 51 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 31 shared commits counted here, the most recent 3 are \u0060f2b48359\u0060 feat: Add support for \u0060explode_outer\u0060 function for arrays (#22100); \u006088fa0dfc\u0060 Add \u0060Field\u0060 to \u0060Expr::Cast\u0060 -- allow logical expressions to express a\u2026; \u0060e221a2c5\u0060 feat: support customize metadata in alias for dataframe api (#15120) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr/src/expr_schema.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19d0c6a8131c65807c4439378db4abaa0597d73df727d6bca67d030030547b84"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: avro.rs \u2194 parquet.rs: \u0060datafusion/core/src/datasource/physical_plan/avro.rs\u0060 and \u0060datafusion/core/src/datasource/physical_plan/parquet.rs\u0060 change together 60% of the time (9 of the 15 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 9 shared commits counted here, the most recent 3 are \u006004c01bba\u0060 feat: add TableSchemaBuilder and store partition columns as Fields (#\u2026; \u00606eb8d45c\u0060 Let \u0060FileScanConfig\u0060 own a list of \u0060ProjectionExpr\u0060s (#18253); \u00603af31caa\u0060 Migrate datasource tests to insta (#15258) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/physical_plan/avro.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"073db34a7860e12e7630482819803ebab967f7686dfd8ecc461fd21c47dd0bf0"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: source.rs \u2194 test_util.rs: \u0060datafusion/datasource-csv/src/source.rs\u0060 and \u0060datafusion/datasource/src/test_util.rs\u0060 change together 60% of the time (6 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u006046b508eb\u0060 perf: optimize object store requests when reading CSV (#22962); \u006075d2473b\u0060 Remove SchemaAdapter (#19345); \u00608a91db56\u0060 Move statistics handling into FileScanConfig (#18721) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-csv/src/source.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3be7a56cdc81f2bea92edcc26dbec698683857a628166e514de909094d477f1c"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: mod.rs \u2194 partial.rs: \u0060datafusion/physical-plan/src/aggregates/mod.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/order/partial.rs\u0060 change together 55% of the time (6 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u0060461dc6d6\u0060 refactor(hash-aggr): Support spilling for ordered aggregation (#23657); \u0060186ba4c3\u0060 Minor: make some physical-plan properties public (#12022); \u00605f38135d\u0060 Update arrow 47.0.0 in DataFusion (#7587) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"521a7c660ddc3388ae696f9fc6084e37a5aacc6e30bcc8337c57f00e264a7c80"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: json.rs \u2194 parquet.rs: \u0060datafusion/core/src/datasource/file_format/json.rs\u0060 and \u0060datafusion/core/src/datasource/file_format/parquet.rs\u0060 change together 54% of the time (15 of the 28 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 15 shared commits counted here, the most recent 3 are \u00602ac032b4\u0060 fix: emit empty RecordBatch for empty file writes (#19370); \u006033be09ad\u0060 Revert \u0022fix: create file for empty stream\u0022 (#16682); \u00604084894e\u0060 fix: create file for empty stream (#16342) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/file_format/json.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fe51306ce44c6cfe06a43d7327b6b49b6642c4f7ff47680212e3525e9e60815"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: listing_schema.rs \u2194 listing_table_factory.rs: \u0060datafusion/catalog/src/listing_schema.rs\u0060 and \u0060datafusion/core/src/datasource/listing_table_factory.rs\u0060 change together 53% of the time (8 of the 15 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u00602b05b09b\u0060 feat: Add builder API for CreateExternalTable to reduce verbosity (#1\u2026; \u0060da893951\u0060 feat: Add \u0060OR REPLACE\u0060 to creating external tables (#17580); \u0060636f4332\u0060 Minor: add flags for temporary ddl (#12561) (at that commit the file was still \u0060datafusion/core/src/catalog_common/listing_schema.rs\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/listing_schema.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcfa90deccefb11c8d9ce6cbcb8269c39f34a9ebfbf598c57c840928da336ec0"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: listing_schema.rs \u2194 statement.rs: \u0060datafusion/catalog/src/listing_schema.rs\u0060 and \u0060datafusion/sql/src/statement.rs\u0060 change together 53% of the time (8 of the 15 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u00602b05b09b\u0060 feat: Add builder API for CreateExternalTable to reduce verbosity (#1\u2026; \u0060da893951\u0060 feat: Add \u0060OR REPLACE\u0060 to creating external tables (#17580); \u0060636f4332\u0060 Minor: add flags for temporary ddl (#12561) (at that commit the file was still \u0060datafusion/core/src/catalog_common/listing_schema.rs\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/listing_schema.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8ebc9f81f3fa974493862e0e63cd46936619aaf36616372ce34cf2b25070c48"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: lib.rs \u2194 to_proto.rs: \u0060datafusion/functions-aggregate/src/lib.rs\u0060 and \u0060datafusion/proto/src/physical_plan/to_proto.rs\u0060 change together 52% of the time (15 of the 29 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 15 shared commits counted here, the most recent 3 are \u006012d82c42\u0060 Move array \u0060ArrayAgg\u0060 to a \u0060UserDefinedAggregate\u0060 (#11448); \u00604ac14280\u0060 Convert \u0060nth_value\u0060 to UDAF (#11287); \u00604bc32281\u0060 Covert grouping to udaf (#11147) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78182809abb00ebeb78a16fdb182267d77ea28bec6adde54ff571dfc65ad9d72"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: aggregates.rs \u2194 lib.rs: \u0060datafusion/expr-common/src/type_coercion/aggregates.rs\u0060 and \u0060datafusion/functions-aggregate/src/lib.rs\u0060 change together 52% of the time (15 of the 29 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 15 shared commits counted here, the most recent 3 are \u00602222abda\u0060 refactor: remove unused \u0060type_coercion/aggregate.rs\u0060 functions (#18091); \u00604ac14280\u0060 Convert \u0060nth_value\u0060 to UDAF (#11287) (at that commit the file was still \u0060datafusion/expr/src/type_coercion/aggregates.rs\u0060); \u00604bc32281\u0060 Covert grouping to udaf (#11147) (at that commit the file was still \u0060datafusion/expr/src/type_coercion/aggregates.rs\u0060) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/expr-common/src/type_coercion/aggregates.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b4f90b00b211b419bf5a4f776ab69bf6a74f9b19cd8073ab30cfd117da6cd53"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: source.rs \u2194 test_util.rs: \u0060datafusion/datasource-arrow/src/source.rs\u0060 and \u0060datafusion/datasource/src/test_util.rs\u0060 change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u006075d2473b\u0060 Remove SchemaAdapter (#19345); \u00608a91db56\u0060 Move statistics handling into FileScanConfig (#18721); \u0060dfba2286\u0060 feat: allow pushdown of dynamic filters having partition cols (#18172) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/datasource-arrow/src/source.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"051055414a08b0fb3cc46bc7fdc8a6f511edd42d3ed132950c0b94f89261c4b9"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: cte_worktable.rs \u2194 physical_planner.rs: \u0060datafusion/catalog/src/cte_worktable.rs\u0060 and \u0060datafusion/core/src/physical_planner.rs\u0060 change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u00601b67f2e9\u0060 Docs: document manual catalog impls and how compilation got faster (#\u2026; \u006008bd332d\u0060 fix: Correctly compute nullability in recursive CTE schemas (#22552); \u00606859b93f\u0060 refactor: move \u0060CteWorkTable\u0060, \u0060default_table_source\u0060   a bunch of fi\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/catalog/src/cte_worktable.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c7e0b8aa2188bbd4134f6392f64abb56e31338ed906247ce2f46bbef73f5bd"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: first_last.rs \u2194 macros.rs: \u0060datafusion/functions-aggregate/src/first_last.rs\u0060 and \u0060datafusion/functions-aggregate/src/macros.rs\u0060 change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u006050dc83a1\u0060 Convert Option\u003CVec\u003Csort expression\u003E\u003E to Vec\u003Csort expression\u003E (#16615); \u006024a08465\u0060 Introduce expr builder for aggregate function (#10560); \u0060a0fccbf8\u0060 Move \u0060Covariance\u0060 (Sample) \u0060covar\u0060 / \u0060covar_samp\u0060 to be a User Define\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/functions-aggregate/src/first_last.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e58984700e18e2635e629896057975f79cbb3f3ec68fae0641c98e47be55b7d5"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: mod.rs \u2194 consumer.rs: \u0060datafusion/core/src/datasource/file_format/mod.rs\u0060 and \u0060datafusion/substrait/src/physical_plan/consumer.rs\u0060 change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u0060ed01b67f\u0060 Refactor PartitionedFile: add ordering field and new_from_meta constr\u2026; \u00606eb8d45c\u0060 Let \u0060FileScanConfig\u0060 own a list of \u0060ProjectionExpr\u0060s (#18253); \u006007e8793e\u0060 allow passing in metadata_size_hint on a per-file basis (#13213) \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/core/src/datasource/file_format/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f2aa734e05d8e31735be126dc786eda4d8d140ce63fb6eebe78ac3c66a4142b"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: bytes_view.rs \u2194 primitive.rs: \u0060datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes_view.rs\u0060 and \u0060datafusion/physical-plan/src/aggregates/group_values/multi_group_by/primitive.rs\u0060 change together 50% of the time (5 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 5 shared commits counted here, the most recent 3 are \u00600add0469\u0060 perf: hoist split_vec_min_alloc to datafusion-common and shrink the e\u2026; \u00602c2f2259\u0060 Return an error on overflow in \u0060do_append_val_inner\u0060 (#16201); \u0060eabbbaf4\u0060 refactor: switch BooleanBufferBuilder to NullBufferBuilder in unit te\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"datafusion/physical-plan/src/aggregates/group_values/multi_group_by/bytes_view.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cdfe0f634a9ce6920453d4c5ec98c4c20b5831ef3450f4e72e4c49f4ebac0f9"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d657599f6f99da1927d3377533dfc0888b34c4d84aa7d5579841fd72d0e39bce"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"P12","level":"warning","message":{"text":"Coverage collected but not gated: CI collects a coverage report but no step enforces a minimum \u2014 coverage could halve and CI stays green. Add a step that fails the build when coverage drops below a floor (your coverage tool\u0027s minimum-threshold flag, or a coverage-gate action) so the number guards something. What was searched, so you can tell an absence from a miss: this repository\u0027s CI files AND its coverage configuration \u2014 the well-known coverage and test-runner config files, read at the repository root and inside workspace package directories two levels down, so a floor declared beside the tests rather than in the pipeline is credited \u2014 matched against the threshold settings this check knows by name. A floor set in your coverage service\u0027s web UI rather than in a committed file, or under a setting whose name is not one of those, is not seen here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7f63c06044cf998d9a0698692df30d8873e29bc9b0c98ee829255017c1193d33"}},{"ruleId":"P2","level":"note","message":{"text":"Logging is not universal: Only 21/27 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060datafusion-examples\u0060, \u0060datafusion/proto-common/gen\u0060, \u0060datafusion/proto-models/gen\u0060, \u0060dev\u0060, \u0060dev/depcheck\u0060 and 1 more."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"P6","level":"warning","message":{"text":"Release pipeline publishes an empty version: \u0060.github/workflows/dependencies.yml:70\u0060 writes \u0060CARGO_MACHETE_VERSION=$CARGO_MACHETE_VERSION\u0060 to \u0060$GITHUB_ENV\u0060, but \u0060$CARGO_MACHETE_VERSION\u0060 is assigned nowhere in that \u0060run:\u0060 block, and nowhere else in the workflow. POSIX shell expands an unset variable to the empty string, so \u0060env.CARGO_MACHETE_VERSION\u0060 is empty on every run and whatever consumes it is handed no version at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":".github/workflows/dependencies.yml"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"c264fffdfac26a4ff558cc5e0a70b6515264cfc0272f4a2d6fccb33524e715fc"}},{"ruleId":"P6","level":"warning","message":{"text":"Release pipeline publishes an empty version: \u0060.github/workflows/dev.yml:71\u0060 writes \u0060LYCHEE_VERSION=$LYCHEE_VERSION\u0060 to \u0060$GITHUB_ENV\u0060, but \u0060$LYCHEE_VERSION\u0060 is assigned nowhere in that \u0060run:\u0060 block, and nowhere else in the workflow. POSIX shell expands an unset variable to the empty string, so \u0060env.LYCHEE_VERSION\u0060 is empty on every run and whatever consumes it is handed no version at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":".github/workflows/dev.yml"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"04360b2f9052cb64f8c3ed081f8d15802c679f05e3875446ce126cfb361810a9"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1104","guid":"4c918cb5-b2a6-6c55-9963-a44ee464305e","name":"CWE-1104","shortDescription":{"text":"CWE-1104"},"helpUri":"https://cwe.mitre.org/data/definitions/1104.html"},{"id":"CWE-1352","guid":"5257f322-5cfc-6b52-bedd-0b9a526b4c7d","name":"CWE-1352","shortDescription":{"text":"CWE-1352"},"helpUri":"https://cwe.mitre.org/data/definitions/1352.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-506","guid":"401d6455-56e3-0552-9a39-f77461673e3f","name":"CWE-506","shortDescription":{"text":"CWE-506"},"helpUri":"https://cwe.mitre.org/data/definitions/506.html"},{"id":"CWE-611","guid":"1afbae66-ea29-2d59-aaa2-134e3ae2e85a","name":"CWE-611","shortDescription":{"text":"CWE-611"},"helpUri":"https://cwe.mitre.org/data/definitions/611.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-807","guid":"7b9d7bab-2171-935b-9279-889089164770","name":"CWE-807","shortDescription":{"text":"CWE-807"},"helpUri":"https://cwe.mitre.org/data/definitions/807.html"},{"id":"CWE-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":76,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}