starrocks icon indicating copy to clipboard operation
starrocks copied to clipboard

[BugFix] fix json v2 rewrite with lambda

Open murphyatwork opened this issue 2 weeks ago โ€ข 6 comments

Why I'm doing:

What I'm doing:

SELECT * FROM extend_predicate 
WHERE any_match(x -> get_json_double(x, '$.longitude') > 0, CAST(c2 AS ARRAY<JSON>))

The lambda function was rewritten into a wrong expresison.

Fixes #issue

What type of PR is this:

  • [x] BugFix
  • [ ] Feature
  • [ ] Enhancement
  • [ ] Refactor
  • [ ] UT
  • [ ] Doc
  • [ ] Tool

Does this PR entail a change in behavior?

  • [ ] Yes, this PR will result in a change in behavior.
  • [x] No, this PR will not result in a change in behavior.

If yes, please specify the type of change:

  • [ ] Interface/UI changes: syntax, type conversion, expression evaluation, display information
  • [ ] Parameter changes: default values, similar parameters but with different default values
  • [ ] Policy changes: use new policy to replace old one, functionality automatically enabled
  • [ ] Feature removed
  • [ ] Miscellaneous: upgrade & downgrade compatibility, etc.

Checklist:

  • [ ] I have added test cases for my bug fix or my new feature
  • [ ] This pr needs user documentation (for new or modified features or behaviors)
    • [ ] I have added documentation for my new feature or new function
  • [ ] This is a backport pr

Bugfix cherry-pick branch check:

  • [x] I have checked the version labels which the pr will be auto-backported to the target branch
    • [x] 4.0
    • [ ] 3.5
    • [ ] 3.4
    • [ ] 3.3

[!NOTE] Skip rewriting JSON functions when the JSON argument is a lambda variable not attached to a table; add a test for any_match scenario and tighten precondition checks.

  • Optimizer (JSON path rewrite)
    • Avoid rewriting supported JSON functions when the JSON argument is a ColumnRefOperator not attached to a table (e.g., lambda variables), by checking columnRefFactory.getTableAndColumn(...).
    • Strengthen safety with Preconditions.checkState in createColumnAccessExpression instead of silently returning the original column.
  • Tests
    • Add lambda case to ensure get_json_double inside any_match is not rewritten (JsonPathRewriteTest case [22]).

Written by Cursor Bugbot for commit 3887d72d9478cad01d84e474e59bec0ae1346674. This will update automatically on new commits. Configure here.

murphyatwork avatar Dec 10 '25 07:12 murphyatwork

๐Ÿงช CI Insights

Here's what we observed from your CI run for 3887d72d.

๐ŸŸข All jobs passed!

But CI Insights is watching ๐Ÿ‘€

mergify[bot] avatar Dec 10 '25 07:12 mergify[bot]

[Java-Extensions Incremental Coverage Report]

:white_check_mark: pass : 0 / 0 (0%)

github-actions[bot] avatar Dec 10 '25 10:12 github-actions[bot]

[BE Incremental Coverage Report]

:white_check_mark: pass : 0 / 0 (0%)

github-actions[bot] avatar Dec 10 '25 10:12 github-actions[bot]

[FE Incremental Coverage Report]

:white_check_mark: pass : 5 / 5 (100.00%)

file detail

path covered_line new_line coverage not_covered_line_detail
:large_blue_circle: com/starrocks/sql/optimizer/rule/tree/JsonPathRewriteRule.java 5 5 100.00% []

github-actions[bot] avatar Dec 10 '25 10:12 github-actions[bot]

@cursor review

alvin-celerdata avatar Dec 11 '25 15:12 alvin-celerdata

@Mergifyio backport branch-4.0

github-actions[bot] avatar Dec 15 '25 02:12 github-actions[bot]

backport branch-4.0

โœ… Backports have been created

mergify[bot] avatar Dec 15 '25 02:12 mergify[bot]