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
§map: Vec<Option<usize>>
Implementations§
source§impl ColIndexMapping
impl ColIndexMapping
sourcepub fn new(map: Vec<Option<usize>>, target_size: usize) -> ColIndexMapping
pub fn new(map: Vec<Option<usize>>, target_size: usize) -> ColIndexMapping
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) -> ColIndexMapping
pub fn is_identity(&self) -> bool
pub fn identity_or_none( source_size: usize, target_size: usize, ) -> ColIndexMapping
pub fn empty(source_size: usize, target_size: usize) -> ColIndexMapping
sourcepub fn with_shift_offset(source_num: usize, offset: isize) -> ColIndexMapping
pub fn with_shift_offset(source_num: usize, offset: isize) -> ColIndexMapping
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,
) -> ColIndexMapping
pub fn with_remaining_columns( cols: &[usize], src_size: usize, ) -> ColIndexMapping
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) -> ColIndexMapping
sourcepub fn with_removed_columns(cols: &[usize], src_size: usize) -> ColIndexMapping
pub fn with_removed_columns(cols: &[usize], src_size: usize) -> ColIndexMapping
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: &ColIndexMapping) -> ColIndexMapping
pub fn composite(&self, following: &ColIndexMapping) -> ColIndexMapping
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) -> ColIndexMapping
sourcepub fn union(&self, other: &ColIndexMapping) -> ColIndexMapping
pub fn union(&self, other: &ColIndexMapping) -> ColIndexMapping
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<ColIndexMapping>
pub fn inverse(&self) -> Option<ColIndexMapping>
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) -> ColIndexMapping
pub fn from_protobuf(prost: &ColIndexMapping) -> 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 ColIndexMappingRewriteExt for ColIndexMapping
impl ColIndexMappingRewriteExt for ColIndexMapping
source§fn rewrite_provided_order(&self, order: &Order) -> Order
fn rewrite_provided_order(&self, order: &Order) -> Order
source§fn rewrite_required_order(&self, order: &Order) -> Option<Order>
fn rewrite_required_order(&self, order: &Order) -> Option<Order>
source§fn rewrite_dist_key(&self, key: &[usize]) -> Option<Vec<usize>>
fn rewrite_dist_key(&self, key: &[usize]) -> Option<Vec<usize>>
source§fn rewrite_provided_distribution(&self, dist: &Distribution) -> Distribution
fn rewrite_provided_distribution(&self, dist: &Distribution) -> Distribution
SomeShard
.source§fn rewrite_required_distribution(&self, dist: &RequiredDist) -> RequiredDist
fn rewrite_required_distribution(&self, dist: &RequiredDist) -> RequiredDist
Any
.source§fn rewrite_functional_dependency(
&self,
fd: &FunctionalDependency,
) -> Option<FunctionalDependency>
fn rewrite_functional_dependency( &self, fd: &FunctionalDependency, ) -> Option<FunctionalDependency>
source§fn rewrite_functional_dependency_set(
&self,
fd_set: FunctionalDependencySet,
) -> FunctionalDependencySet
fn rewrite_functional_dependency_set( &self, fd_set: FunctionalDependencySet, ) -> FunctionalDependencySet
fd_set
one by one, using
[ColIndexMapping::rewrite_functional_dependency]
. Read morefn rewrite_bitset(&self, bitset: &FixedBitSet) -> FixedBitSet
fn rewrite_monotonicity_map(&self, map: &MonotonicityMap) -> MonotonicityMap
source§impl Debug for ColIndexMapping
impl Debug for ColIndexMapping
source§impl ExprRewriter for ColIndexMapping
impl ExprRewriter for ColIndexMapping
fn rewrite_input_ref(&mut self, input_ref: InputRef) -> ExprImpl
fn rewrite_expr(&mut self, expr: ExprImpl) -> ExprImpl
fn rewrite_function_call(&mut self, func_call: FunctionCall) -> ExprImpl
fn rewrite_function_call_with_lambda( &mut self, func_call: FunctionCallWithLambda, ) -> ExprImpl
fn rewrite_agg_call(&mut self, agg_call: AggCall) -> ExprImpl
fn rewrite_parameter(&mut self, parameter: Parameter) -> ExprImpl
fn rewrite_literal(&mut self, literal: Literal) -> ExprImpl
fn rewrite_subquery(&mut self, subquery: Subquery) -> ExprImpl
fn rewrite_table_function(&mut self, table_func: TableFunction) -> ExprImpl
fn rewrite_window_function(&mut self, window_func: WindowFunction) -> ExprImpl
fn rewrite_user_defined_function( &mut self, udf: UserDefinedFunction, ) -> ExprImpl
fn rewrite_now(&mut self, now: Now) -> ExprImpl
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<T> Conv for T
impl<T> Conv for T
§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§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> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§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>
§impl<T, U, I> LiftInto<U, I> for Twhere
U: LiftFrom<T, I>,
impl<T, U, I> LiftInto<U, I> for Twhere
U: LiftFrom<T, I>,
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.§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<Source> Sculptor<HNil, HNil> for Source
impl<Source> Sculptor<HNil, HNil> for Source
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.