github-actions[bot] commented on code in PR #67341:
URL: https://github.com/apache/doris/pull/67341#discussion_r3894890369


##########
be/src/storage/index/zone_map/zone_map_index.cpp:
##########
@@ -54,6 +54,18 @@ Status ZoneMap::from_proto(const ZoneMapPB& zone_map, const 
DataTypePtr& data_ty
     zone_map_info.has_positive_inf = zone_map.has_positive_inf();
     zone_map_info.has_nan = zone_map.has_nan();
 
+    // A bound that fails to parse makes the zone map invalid: mark it 
pass_all so it prunes
+    // nothing, instead of failing the scan that loads it.
+    auto parse_bound = [&](const std::string& bound, Field& value, const char* 
which) {
+        Status st = data_type->get_serde()->from_zonemap_string(bound, value);

Review Comment:
   **[P1] Invalidate parseable legacy floating bounds too**
   
   This fallback only catches legacy strings that fail parsing. The same old 
16g/7g writer could emit an inward-rounded but valid string: a DOUBLE page 
containing only `1.0000000000000002` stored `min=max="1"`. Parsing succeeds and 
leaves `pass_all=false`, so `col > 1.0` is pruned because the parsed max equals 
`1.0` even though the row matches; pushed `MAX` likewise returns `1.0`. The 
existing serde test comments already note that `digits10 + 1` loses precision 
for ordinary finite values. Please add a conservative compatibility strategy 
for ambiguous legacy floating bounds, widening or invalidating them when their 
origin cannot be proven, and add a regression using a successfully parsed 
inward-rounded bound.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to