pub struct MergeJoinRel {
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 merge equijoin does a join by taking advantage of two sets that are sorted on the join keys. This allows the join operation to be done in a streaming fashion.
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 ordering of the input data. For example, if the comparison function is “<” then we generally expect the data to be sorted in ascending order.
If the comparison function is something like “less than ignoring case” then the data should be sorted appropriately (e.g. both “A” and “a” should come before “b”)
The sort order is not specified here. It is typically the responsibility of the producer to ensure the plan sorts the data if needed (although the consumer is free to do so as well). If possible, the consumer should verify the sort order and reject invalid plans.
post_join_filter: Option<Box<Expression>>
§type: i32
§advanced_extension: Option<AdvancedExtension>
Implementations§
Trait Implementations§
Source§impl Clone for MergeJoinRel
impl Clone for MergeJoinRel
Source§fn clone(&self) -> MergeJoinRel
fn clone(&self) -> MergeJoinRel
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for MergeJoinRel
impl Debug for MergeJoinRel
Source§impl Default for MergeJoinRel
impl Default for MergeJoinRel
§impl<'de> Deserialize<'de> for MergeJoinRel
impl<'de> Deserialize<'de> for MergeJoinRel
§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>,
Source§impl Message for MergeJoinRel
impl Message for MergeJoinRel
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
.