pub struct ColIndexMapping {
target_size: usize,
map: Vec<Option<usize>>,
}
Expand description
ColIndexMapping
is a partial mapping from usize to usize.
It is used in optimizer for transformation of column index.
Fields§
§target_size: usize
The size of the target space, i.e. target index is in the range (0..target_size)
.
map: Vec<Option<usize>>
Each subscript is mapped to the corresponding element.
Implementations§
source§impl ColIndexMapping
impl ColIndexMapping
sourcepub fn new(map: Vec<Option<usize>>, target_size: usize) -> Self
pub fn new(map: Vec<Option<usize>>, target_size: usize) -> Self
Create a partial mapping which maps from the subscripts range (0..map.len())
to
(0..target_size)
. Each subscript is mapped to the corresponding element.
pub fn into_parts(self) -> (Vec<Option<usize>>, usize)
pub fn to_parts(&self) -> (&[Option<usize>], usize)
pub fn put(&mut self, src: usize, tar: Option<usize>)
pub fn identity(size: usize) -> Self
pub fn is_identity(&self) -> bool
pub fn identity_or_none(source_size: usize, target_size: usize) -> Self
pub fn empty(source_size: usize, target_size: usize) -> Self
sourcepub fn with_shift_offset(source_num: usize, offset: isize) -> Self
pub fn with_shift_offset(source_num: usize, offset: isize) -> Self
Create a partial mapping which maps range (0..source_num)
to range
(offset..offset+source_num)
.
§Examples
Positive offset:
let mapping = ColIndexMapping::with_shift_offset(3, 3);
assert_eq!(mapping.map(0), 3);
assert_eq!(mapping.map(1), 4);
assert_eq!(mapping.map(2), 5);
Negative offset:
let mapping = ColIndexMapping::with_shift_offset(6, -3);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(1), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.map(3), 0);
assert_eq!(mapping.map(4), 1);
assert_eq!(mapping.map(5), 2);
assert_eq!(mapping.try_map(6), None);
sourcepub fn with_remaining_columns(cols: &[usize], src_size: usize) -> Self
pub fn with_remaining_columns(cols: &[usize], src_size: usize) -> Self
Maps the smallest index to 0, the next smallest to 1, and so on.
It is useful for column pruning.
§Examples
let mut remaining_cols = vec![1, 3];
let mapping = ColIndexMapping::with_remaining_columns(&remaining_cols, 4);
assert_eq!(mapping.map(1), 0);
assert_eq!(mapping.map(3), 1);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.try_map(4), None);
pub fn with_included_columns(cols: &[usize], src_size: usize) -> Self
sourcepub fn with_removed_columns(cols: &[usize], src_size: usize) -> Self
pub fn with_removed_columns(cols: &[usize], src_size: usize) -> Self
Remove the given columns, and maps the remaining columns to a consecutive range starting from 0.
§Examples
let mut removed_cols = vec![0, 2, 4];
let mapping = ColIndexMapping::with_removed_columns(&removed_cols, 5);
assert_eq!(mapping.map(1), 0);
assert_eq!(mapping.map(3), 1);
assert_eq!(mapping.try_map(0), None);
assert_eq!(mapping.try_map(2), None);
assert_eq!(mapping.try_map(4), None);
sourcepub fn composite(&self, following: &Self) -> Self
pub fn composite(&self, following: &Self) -> Self
Compose column index mappings.
For example if this maps 0->5,
and following
maps 5->1,
Then the composite has 0->5->1 => 0->1.
pub fn clone_with_offset(&self, offset: usize) -> Self
sourcepub fn union(&self, other: &Self) -> Self
pub fn union(&self, other: &Self) -> Self
Union two mapping, the result mapping target_size
and source size will be the max size
of the two mappings.
§Panics
Will panic if a source appears in both to mapping
sourcepub fn inverse(&self) -> Option<Self>
pub fn inverse(&self) -> Option<Self>
Inverse the mapping. If a target corresponds to more than one source, return None
.
sourcepub fn mapping_pairs(&self) -> impl Iterator<Item = (usize, usize)> + '_
pub fn mapping_pairs(&self) -> impl Iterator<Item = (usize, usize)> + '_
return iter of (src, dst) order by src
sourcepub fn try_map(&self, index: usize) -> Option<usize>
pub fn try_map(&self, index: usize) -> Option<usize>
Try mapping the source index to the target index.
sourcepub fn try_map_all(
&self,
indices: impl IntoIterator<Item = usize>,
) -> Option<Vec<usize>>
pub fn try_map_all( &self, indices: impl IntoIterator<Item = usize>, ) -> Option<Vec<usize>>
Try mapping all the source indices to the target indices. Returns None
if any of the
indices is not mapped.
sourcepub fn map(&self, index: usize) -> usize
pub fn map(&self, index: usize) -> usize
§Panics
Will panic if index >= self.source_size()
or index
is not mapped.
sourcepub fn target_size(&self) -> usize
pub fn target_size(&self) -> usize
Returns the size of the target range. Target index is in the range (0..target_size)
.
sourcepub fn source_size(&self) -> usize
pub fn source_size(&self) -> usize
Returns the size of the source range. Source index is in the range (0..source_size)
.
pub fn is_empty(&self) -> bool
pub fn is_injective(&self) -> bool
source§impl ColIndexMapping
impl ColIndexMapping
pub fn to_protobuf(&self) -> PbColIndexMapping
pub fn from_protobuf(prost: &PbColIndexMapping) -> ColIndexMapping
source§impl ColIndexMapping
impl ColIndexMapping
sourcepub fn rewrite_dispatch_strategy(
&self,
strategy: &DispatchStrategy,
) -> Option<DispatchStrategy>
pub fn rewrite_dispatch_strategy( &self, strategy: &DispatchStrategy, ) -> Option<DispatchStrategy>
Rewrite the dist-key indices and output indices in the given dispatch strategy. Returns
None
if any of the indices is not mapped to the target.
Trait Implementations§
source§impl Clone for ColIndexMapping
impl Clone for ColIndexMapping
source§fn clone(&self) -> ColIndexMapping
fn clone(&self) -> ColIndexMapping
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for ColIndexMapping
impl Debug for ColIndexMapping
source§impl Hash for ColIndexMapping
impl Hash for ColIndexMapping
source§impl PartialEq for ColIndexMapping
impl PartialEq for ColIndexMapping
impl Eq for ColIndexMapping
impl StructuralPartialEq for ColIndexMapping
Auto Trait Implementations§
impl Freeze for ColIndexMapping
impl RefUnwindSafe for ColIndexMapping
impl Send for ColIndexMapping
impl Sync for ColIndexMapping
impl Unpin for ColIndexMapping
impl UnwindSafe for ColIndexMapping
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.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.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§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> 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
§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
source§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
source§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level
.source§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
.source§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
with metric_level
set to
MetricLevel::Debug
and relabel_num
set to 1.