)]}'
{
  "commit": "6d70a7f98195d711f7fa5fe88881e7bb8e097fd5",
  "tree": "39aa399d1bdb4c6b5fade138c64c2a00e2693fc9",
  "parents": [
    "4c4c708cd7f422e49a0c32a15a4649fee72e8a1b"
  ],
  "author": {
    "name": "englefly",
    "email": "zhouminghong@selectdb.com",
    "time": "Tue Jun 09 11:57:42 2026 +0800"
  },
  "committer": {
    "name": "englefly",
    "email": "zhouminghong@selectdb.com",
    "time": "Tue Jun 09 11:57:42 2026 +0800"
  },
  "message": "[fix](nereids) strip NULL access path when OFFSET path exists for the same field in NestedColumnPruning\n\nstripNullSuffixPaths() already contains the logic to remove [col.NULL] when\n[col.OFFSET] covers the same prefix (lines 834-839), but it was only called\nin the string-like and general branches, not in the array/map early-continue\nbranch. This caused queries like `SELECT cardinality(arr), arr IS NULL` to\nemit redundant [arr.NULL] alongside [arr.OFFSET] in the access paths.\n\nFix: move stripNullSuffixPaths() call to line 278 (before all type-specific\nearly-continue branches) so it applies uniformly to all complex data types.\n\nAdd regression tests covering array root, map root, struct string subfield,\nstruct array subfield, and struct map subfield.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "50416a2940816bd4c461479c339b3500df318662",
      "old_mode": 33188,
      "old_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NestedColumnPruning.java",
      "new_id": "096b38cc0bf0c4fcea7c86ce08026fb60005d7d5",
      "new_mode": 33188,
      "new_path": "fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/NestedColumnPruning.java"
    },
    {
      "type": "modify",
      "old_id": "48c0cb37a4988dd20dde152712671227cea01964",
      "old_mode": 33188,
      "old_path": "regression-test/suites/nereids_rules_p0/column_pruning/string_length_column_pruning.groovy",
      "new_id": "8ee676d0315abaf9da9c1ce22ce1c31654ebb6f1",
      "new_mode": 33188,
      "new_path": "regression-test/suites/nereids_rules_p0/column_pruning/string_length_column_pruning.groovy"
    }
  ]
}
