algeon-cudf 0.1.2

Safe libcudf execution component for Algeon
Documentation
use super::*;

impl DataFrame {
    pub(crate) fn mixed_join_indices_in_context(
        &self,
        right: &DataFrame,
        predicate: &AstExpression,
        options: DataFrameMixedJoinOptions,
        join_type: join::JoinType,
        ctx: Exec<'_>,
    ) -> Result<DataFrameJoinPairIndices> {
        let operation = "dataframe::mixed_join_indices";
        let tables = mixed_join_tables(self, right, &options, operation)?;
        let raw = match join_type {
            join::JoinType::Inner => join::mixed_inner_join_indices_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?,
            join::JoinType::Left => join::mixed_left_join_indices_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?,
            join::JoinType::Full => join::mixed_full_join_indices_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?,
        };
        pair_indices_from_raw(raw, operation)
    }

    pub(crate) fn mixed_join_size_data_in_context<'a>(
        &self,
        right: &DataFrame,
        predicate: &'a AstExpression,
        options: DataFrameMixedJoinOptions,
        join_type: join::SizedMixedJoinType,
        ctx: Exec<'_>,
    ) -> Result<DataFrameMixedJoinSizeData<'a>> {
        let operation = "dataframe::mixed_join_size_data";
        let tables = mixed_join_tables(self, right, &options, operation)?;
        let state = match join_type {
            join::SizedMixedJoinType::Inner => join::mixed_inner_join_begin_size_data_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?,
            join::SizedMixedJoinType::Left => join::mixed_left_join_begin_size_data_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?,
            join::SizedMixedJoinType::Full => join::mixed_full_join_begin_size_data_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?,
        };
        Ok(DataFrameMixedJoinSizeData { state, _left: self.clone(), _right: right.clone() })
    }

    pub(crate) fn mixed_single_side_join_size_data_in_context<'a>(
        &self,
        right: &DataFrame,
        predicate: &'a AstExpression,
        options: DataFrameMixedJoinOptions,
        semi_join: bool,
        ctx: Exec<'_>,
    ) -> Result<DataFrameMixedSingleSideJoinSizeData<'a>> {
        let operation = "dataframe::mixed_single_side_join_size_data";
        let tables = mixed_join_tables(self, right, &options, operation)?;
        let state = if semi_join {
            join::mixed_left_semi_join_begin_size_data_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?
        } else {
            join::mixed_left_anti_join_begin_size_data_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?
        };
        Ok(DataFrameMixedSingleSideJoinSizeData { state, _left: self.clone(), _right: right.clone() })
    }

    pub(crate) fn mixed_single_side_join_indices_in_context(
        &self,
        right: &DataFrame,
        predicate: &AstExpression,
        options: DataFrameMixedJoinOptions,
        semi_join: bool,
        ctx: Exec<'_>,
    ) -> Result<DataFrameJoinIndices> {
        let operation = "dataframe::mixed_single_side_join_indices";
        let tables = mixed_join_tables(self, right, &options, operation)?;
        let raw = if semi_join {
            join::mixed_left_semi_join_indices_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?
        } else {
            join::mixed_left_anti_join_indices_in(
                &tables.left_equality,
                &tables.right_equality,
                &tables.left_conditional,
                &tables.right_conditional,
                predicate,
                options.null_eq(),
                ctx,
            )?
        };
        single_side_indices_from_raw(raw, operation)
    }
}