)]}'
{
  "commit": "ee0c1bfa0b6d55aecd4e8acc3354fdfcb5ac7ddd",
  "tree": "a2d9846e2e3920dab9e0a59feb2cc4ab94b307ca",
  "parents": [
    "19731aa58072a40089ea2e4bd9c0f96c3aa2f801"
  ],
  "author": {
    "name": "Zoltan Borok-Nagy",
    "email": "boroknagyz@cloudera.com",
    "time": "Fri Oct 23 17:40:02 2026 +0200"
  },
  "committer": {
    "name": "Impala Public Jenkins",
    "email": "impala-public-jenkins@cloudera.com",
    "time": "Thu Nov 12 15:46:54 2026 +0000"
  },
  "message": "IMPALA-15641: Interpret escapes in the fast paths of LIKE\n\nLikePredicate::OptimizeConstantPatternMatch() matched constant patterns\nand simple prefix, suffix and substring patterns verbatim, while the\nregex path, which is also used for patterns that are not constant,\ntreats a backslash as an escape for any character and ignores a\ntrailing backslash. So the result depended on the shape of the\npattern, e.g. \u0027abc%x\u0027 LIKE \u0027abc\\%%\u0027 was false, but\n\u0027abc%x\u0027 LIKE \u0027abc\\%_%\u0027 was true. IMPALA-10849 and IMPALA-14731 fixed\nthis only for patterns that end with an escaped \u0027%\u0027.\n\nNow all paths follow the same rule: a backslash escapes \u0027%\u0027, \u0027_\u0027 and\nitself, and before any other character, or at the end of the pattern,\nit is a literal backslash. This matches Hive, except that \u0027\\\\\u0027 is two\nbackslashes in Hive. The fast paths are chosen and their search strings\ncomputed after interpreting the escapes, so they are only an\noptimization. Patterns that are not valid UTF-8 still take the regex\npath, which rejects them.\n\nChanged results, where \u0027...\u0027 is any string and \u0027?\u0027 is any character.\nThe patterns are after SQL string literal unescaping, e.g.\ns LIKE \u0027C:\\\\dir%\u0027 is the pattern C:\\dir%.\n\n  Pattern    Path    Before        After\n  abc\\%%     fast    abc\\...       abc%...\n  %\\%%       fast    ...\\...       ...%...\n  a\\\\b%      fast    a\\\\b...       a\\b...\n  C:\\dir_%   regex   C:dir?...     C:\\dir?...\n  a%\\        regex   a...          a...\\\n\nPatterns that are not constant and ILIKE always took the regex path,\ne.g. C:\\dir% matched C:dir... for them.\n\nIcebergPredicateConverter mirrored the verbatim fast paths when pushing\ndown LIKE to Iceberg (IMPALA-15634). Now it unescapes every pattern the\nsame way as the backend.\n\nDocumented the escapes of LIKE and the change in the 5.0 incompatible\nchanges. Removed the IMPALA-2422 known issue, its example works since\nIMPALA-10849.\n\nTesting:\n - Added BE tests for the escapes, also checking that the fast paths\n   match the same values as the regex for non-constant patterns.\n - Updated FE tests and added EE tests for LIKE push down with escapes.\n - Built plain-html docs without errors.\n\nChange-Id: Ia8b6872a6a200bfadb36d3ee83869bde76b8f3a5\nAssisted-by: Claude Opus 5.5 (Claude Code)\nReviewed-on: https://gerrit.cloudera.org/25198\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fda588290b3676f28e432483192c35e2954fd20d",
      "old_mode": 33188,
      "old_path": "be/src/exprs/expr-test.cc",
      "new_id": "9c9065388f3a6f18ee83c450fbc2bc0f75b79173",
      "new_mode": 33188,
      "new_path": "be/src/exprs/expr-test.cc"
    },
    {
      "type": "modify",
      "old_id": "76613362dc0623dc28e5c55bb82d50a914cd76a2",
      "old_mode": 33188,
      "old_path": "be/src/exprs/like-predicate-test.cc",
      "new_id": "20af55741bdcc09bf1d287f60eddf8c4411602ec",
      "new_mode": 33188,
      "new_path": "be/src/exprs/like-predicate-test.cc"
    },
    {
      "type": "modify",
      "old_id": "a73d7b02c372761860bdc3365c75a2bd19176408",
      "old_mode": 33188,
      "old_path": "be/src/exprs/like-predicate.cc",
      "new_id": "2708ac95dd7d1839de3c716438511b5693fb9a14",
      "new_mode": 33188,
      "new_path": "be/src/exprs/like-predicate.cc"
    },
    {
      "type": "modify",
      "old_id": "99e1b70ee261add31a67a7756a477287593b1633",
      "old_mode": 33188,
      "old_path": "be/src/exprs/like-predicate.h",
      "new_id": "3fad5b04bb57189beffad7794c2ed95712aa8f9b",
      "new_mode": 33188,
      "new_path": "be/src/exprs/like-predicate.h"
    },
    {
      "type": "modify",
      "old_id": "c135ac990db197af98a2d8bba0952c98286fa5ca",
      "old_mode": 33188,
      "old_path": "docs/topics/impala_incompatible_changes.xml",
      "new_id": "76309794b9f452a45a153c6177779d49e74ae788",
      "new_mode": 33188,
      "new_path": "docs/topics/impala_incompatible_changes.xml"
    },
    {
      "type": "modify",
      "old_id": "edb549c238a239ef38e79299910b1443897e7f77",
      "old_mode": 33188,
      "old_path": "docs/topics/impala_known_issues.xml",
      "new_id": "9f1755c3412640cb2941c471182b6dbef64ad3cf",
      "new_mode": 33188,
      "new_path": "docs/topics/impala_known_issues.xml"
    },
    {
      "type": "modify",
      "old_id": "066645788dd11562e7247ec1e318062710d87b40",
      "old_mode": 33188,
      "old_path": "docs/topics/impala_operators.xml",
      "new_id": "c07e567a9eff43de52c8df278600ba490ba29dd1",
      "new_mode": 33188,
      "new_path": "docs/topics/impala_operators.xml"
    },
    {
      "type": "modify",
      "old_id": "203adbdf00ed8ca32be39fd21c6ec3b71b1ebedc",
      "old_mode": 33188,
      "old_path": "fe/src/main/java/org/apache/impala/common/IcebergPredicateConverter.java",
      "new_id": "236e24fef94f9bf4aad15712ff9558f5bec120a2",
      "new_mode": 33188,
      "new_path": "fe/src/main/java/org/apache/impala/common/IcebergPredicateConverter.java"
    },
    {
      "type": "modify",
      "old_id": "57181320dad849e3cd17f3eefaa7b1b3a0320e7e",
      "old_mode": 33188,
      "old_path": "fe/src/test/java/org/apache/impala/common/IcebergPredicateConverterTest.java",
      "new_id": "4e785f9e73ceaffbc671398997f0fb41669c0bb8",
      "new_mode": 33188,
      "new_path": "fe/src/test/java/org/apache/impala/common/IcebergPredicateConverterTest.java"
    },
    {
      "type": "modify",
      "old_id": "c100d6efb5feba292c841a93b5fa9c9218b24ab3",
      "old_mode": 33188,
      "old_path": "testdata/workloads/functional-query/queries/QueryTest/iceberg-like-pushdown.test",
      "new_id": "c9df11f122ed2337b969336653818b820ec0bfb8",
      "new_mode": 33188,
      "new_path": "testdata/workloads/functional-query/queries/QueryTest/iceberg-like-pushdown.test"
    }
  ]
}
