pub struct KeyRange {
pub lo: Option<i64>,
pub hi: Option<i64>,
}Expand description
A half-open integer key range [lo, hi); None = unbounded on that side.
Fields§
§lo: Option<i64>§hi: Option<i64>Implementations§
Source§impl KeyRange
impl KeyRange
Sourcepub fn width(&self) -> Option<u128>
pub fn width(&self) -> Option<u128>
Number of integer keys the range spans, when both ends are bounded.
Sourcepub fn to_shard(&self, key: &str) -> ShardSpec
pub fn to_shard(&self, key: &str) -> ShardSpec
The PK-range shard descriptor a SQL source’s apply_shard narrows to —
the same shape plan_pk_shards emits, so
the range predicate is built by one shared, tested routine. NULL keys are
owned by the unbounded-above range, so a NULL-key row is read exactly
once across a partition of the key space.
Sourcepub fn bisect(&self, obs: Option<(i64, i64)>) -> Option<(KeyRange, KeyRange)>
pub fn bisect(&self, obs: Option<(i64, i64)>) -> Option<(KeyRange, KeyRange)>
Split the range in two at its midpoint. An unbounded side is first
clamped to the observed key bounds (obs, the union of both sides’
key_min..=key_max), because a digest can only tell us where rows are.
Returns None when the range cannot be split further (one key wide, or
no observed bounds to clamp with) — the caller then treats it as a leaf.
Trait Implementations§
impl Copy for KeyRange
Source§impl<'de> Deserialize<'de> for KeyRange
impl<'de> Deserialize<'de> for KeyRange
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for KeyRange
impl StructuralPartialEq for KeyRange
Auto Trait Implementations§
impl Freeze for KeyRange
impl RefUnwindSafe for KeyRange
impl Send for KeyRange
impl Sync for KeyRange
impl Unpin for KeyRange
impl UnsafeUnpin for KeyRange
impl UnwindSafe for KeyRange
Blanket Implementations§
impl<T> Allocation for T
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request