@@ -90,11 +90,15 @@ use size_of::SizeOf;
9090/// - v3: Bloom filter format change.
9191/// - v4: Tup None optimizations.
9292/// - v5: Change in representation for Timestamp, ShortInterval
93+ /// - v6: Roaring bitmap filter blocks.
9394///
9495/// When a new version is created, make sure to generate new golden
9596/// files for it in crate `storage-test-compat` to check for
9697/// backwards compatibility.
97- pub const VERSION_NUMBER : u32 = 5 ;
98+ pub const VERSION_NUMBER : u32 = 6 ;
99+
100+ /// Oldest layer file format version this binary can read.
101+ pub const MIN_SUPPORTED_VERSION : u32 = 5 ;
98102
99103/// Magic number for data blocks.
100104pub const DATA_BLOCK_MAGIC : [ u8 ; 4 ] = * b"LFDB" ;
@@ -244,6 +248,17 @@ impl FileTrailer {
244248 ( self . compatible_features & feature) != 0
245249 }
246250
251+ /// Returns the unknown incompatible features, if any.
252+ pub fn unknown_incompatible_features ( & self ) -> Option < u64 > {
253+ let unknown_incompatible_features =
254+ self . incompatible_features & !INCOMPATIBLE_FEATURE_ROARING_FILTERS ;
255+ if unknown_incompatible_features != 0 {
256+ Some ( unknown_incompatible_features)
257+ } else {
258+ None
259+ }
260+ }
261+
247262 /// Returns true if this file trailer has a 64-bit filter.
248263 pub fn has_filter64 ( & self ) -> bool {
249264 self . has_compatible_feature ( COMPATIBLE_FEATURE_FILTER64 )
@@ -260,6 +275,10 @@ pub const COMPATIBLE_FEATURE_FILTER64: u64 = 1 << 0;
260275/// deserialized as if its value is 0. Conversely, old readers will simply ignore the field.
261276pub const COMPATIBLE_FEATURE_NEGATIVE_WEIGHT_COUNT : u64 = 1 << 1 ;
262277
278+ /// Bit set to 1 in [FileTrailer::incompatible_features] if the file contains
279+ /// roaring bitmap membership filter blocks.
280+ pub const INCOMPATIBLE_FEATURE_ROARING_FILTERS : u64 = 1 << 0 ;
281+
263282/// Information about a column.
264283///
265284/// Embedded inside the [`FileTrailer`] block.
0 commit comments