pub struct HashJoinRel {
pub common: Option<RelCommon>,
pub left: Option<Box<Rel>>,
pub right: Option<Box<Rel>>,
pub left_keys: Vec<FieldReference>,
pub right_keys: Vec<FieldReference>,
pub keys: Vec<ComparisonJoinKey>,
pub post_join_filter: Option<Box<Expression>>,
pub type: i32,
pub advanced_extension: Option<AdvancedExtension>,
}Expand description
The hash equijoin join operator will build a hash table out of the right input based on a set of join keys. It will then probe that hash table for incoming inputs, finding matches.
Two rows are a match if the comparison function returns true for all keys
Fields§
§common: Option<RelCommon>§left: Option<Box<Rel>>§right: Option<Box<Rel>>§left_keys: Vec<FieldReference>These fields are deprecated in favor of keys. If they are set then
the two lists (left_keys and right_keys) must have the same length and
the comparion function is considered to be SimpleEqualityType::EQ
right_keys: Vec<FieldReference>keys: Vec<ComparisonJoinKey>One or more keys to join on. The relation is invalid if this is empty (unless the deprecated left_keys/right_keys fields are being used).
If a custom comparison function is used then it must be consistent with the hash function used for the keys.
In other words, the hash function must return the same hash code when the comparison returns true. For example, if the comparison function is “equals ignoring case” then the hash function must return the same hash code for strings that differ only by case. Note: the hash function is not specified here. It is the responsibility of the consumer to find an appropriate hash function for a given comparsion function or to reject the plan if it cannot do so.
post_join_filter: Option<Box<Expression>>§type: i32§advanced_extension: Option<AdvancedExtension>Implementations§
Trait Implementations§
Source§impl Clone for HashJoinRel
impl Clone for HashJoinRel
Source§fn clone(&self) -> HashJoinRel
fn clone(&self) -> HashJoinRel
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for HashJoinRel
impl Debug for HashJoinRel
Source§impl Default for HashJoinRel
impl Default for HashJoinRel
Source§impl InputNode for HashJoinRel
impl InputNode for HashJoinRel
Source§fn type_to_node() -> Node
fn type_to_node() -> Node
Source§fn data_to_node(&self) -> Node
fn data_to_node(&self) -> Node
Source§fn oneof_variant(&self) -> Option<&'static str>
fn oneof_variant(&self) -> Option<&'static str>
Source§fn parse_unknown(&self, y: &mut Context<'_>) -> bool
fn parse_unknown(&self, y: &mut Context<'_>) -> bool
Source§impl Message for HashJoinRel
impl Message for HashJoinRel
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.Source§impl PartialEq for HashJoinRel
impl PartialEq for HashJoinRel
Source§impl ProtoMessage for HashJoinRel
impl ProtoMessage for HashJoinRel
Source§fn proto_message_type() -> &'static str
fn proto_message_type() -> &'static str
impl StructuralPartialEq for HashJoinRel
Auto Trait Implementations§
impl Freeze for HashJoinRel
impl RefUnwindSafe for HashJoinRel
impl Send for HashJoinRel
impl Sync for HashJoinRel
impl Unpin for HashJoinRel
impl UnwindSafe for HashJoinRel
Blanket Implementations§
Source§impl<T> AnyExt for T
impl<T> AnyExt for T
Source§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind referenceSource§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable referenceSource§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointerSource§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointerSource§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§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
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