fix(query): fix row access policy parameter order and case sensitivity #18889
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
I hereby agree to the terms of the CLA available at: https://docs.databend.com/dev/policies/cla/
Summary
This commit fixes three critical bugs in row access policy that caused
incorrect filtering behavior with multi-parameter policies.
Issue 1: Parameter case sensitivity (storage)
Parameter names were stored with original case but looked up with
lowercase, causing HashMap mismatches.
Fix: Normalize parameter names to lowercase at creation time to ensure
case-insensitive matching (mirrors masking policy fix).
Issue 2: Parameter case sensitivity (lookup)
When replacing parameters in policy body expressions, the lookup key
used original case while args_map keys were lowercase.
Fix: Normalize lookup keys to lowercase when replacing parameters.
Issue 3: Parameter order not preserved
Using BTreeMap in protobuf serialization sorted parameters alphabetically,
breaking multi-parameter policies where order matters.
Example bug:
CREATE ROW ACCESS POLICY rap AS (UserId, Department) ...
ALTER TABLE t ADD ROW ACCESS POLICY rap ON (c1, c2);
Fix: Add args_v2 field using repeated message to preserve order, with
backward compatibility for old args map field.
Changes:
Fixes parameter substitution in row access policies.
Tests
Type of change
This change is