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]