pub struct PropertySetJsonbDictionaryBuilder { /* private fields */ }Expand description
Custom dictionary builder for PropertySet → JSONB encoding with pointer-based deduplication.
This builder eliminates redundant JSONB serialization and dictionary hash lookups
for duplicate PropertySets by using PropertySet’s Arc<Object> pointer addresses as keys.
Performance benefits over Arrow’s BinaryDictionaryBuilder:
- Eliminates content-based hashing: Arrow’s builder hashes JSONB bytes for deduplication
- Pointer-based deduplication: O(1) pointer comparison vs O(n) content hash
- Serialization only when needed: Only serialize PropertySet on first encounter
- Memory efficiency: Shared PropertySet references, single JSONB copy per unique set
§Invariant (must not outlive a single parse arena)
The pointer keys are only unique while every appended PropertySet borrows the
same parse arena. A dropped arena’s address can be recycled by the next block’s
arena, so a builder instance must be fed exactly one block / one arena: construct
it fresh in each block processor and finish() it before the arena is dropped.
Reusing one builder across arenas would let a recycled address alias a stale
entry and emit the wrong JSONB. append_property_set debug-asserts this
invariant so any future cross-arena reuse fails loudly in debug/test builds.
Implementations§
Source§impl PropertySetJsonbDictionaryBuilder
impl PropertySetJsonbDictionaryBuilder
Sourcepub fn new(capacity: usize) -> PropertySetJsonbDictionaryBuilder
pub fn new(capacity: usize) -> PropertySetJsonbDictionaryBuilder
Create a new builder with the specified capacity hint
Sourcepub fn append_property_set(
&mut self,
property_set: &PropertySet<'_>,
) -> Result<(), Error>
pub fn append_property_set( &mut self, property_set: &PropertySet<'_>, ) -> Result<(), Error>
Append PropertySet using pointer-based deduplication
For cache hits: reuses existing dictionary index (no serialization) For cache misses: serializes once and stores in dictionary
Sourcepub fn append_null(&mut self)
pub fn append_null(&mut self)
Append a null value
Auto Trait Implementations§
impl Freeze for PropertySetJsonbDictionaryBuilder
impl RefUnwindSafe for PropertySetJsonbDictionaryBuilder
impl Send for PropertySetJsonbDictionaryBuilder
impl Sync for PropertySetJsonbDictionaryBuilder
impl Unpin for PropertySetJsonbDictionaryBuilder
impl UnsafeUnpin for PropertySetJsonbDictionaryBuilder
impl UnwindSafe for PropertySetJsonbDictionaryBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].