package com.taobao.tddl.optimizer.core.plan.query; import java.util.List; import com.taobao.tddl.optimizer.core.expression.IFilter; import com.taobao.tddl.optimizer.core.expression.ISelectable; import com.taobao.tddl.optimizer.core.plan.IQueryTree; /** * Join node of the execute plan easy to understand * * @author Dreamond * @since 5.0.0 */ public interface IJoin extends IParallelizableQueryTree<IQueryTree> { public enum JoinStrategy { HASH_JOIN, NEST_LOOP_JOIN, INDEX_NEST_LOOP, SORT_MERGE_JOIN; } /** * 设置join节点 * * @param left * @param right * @return */ IJoin setJoinNodes(IQueryTree left, IQueryTree right); /** * 设置左join 元素 * * @param left * @return */ IJoin setLeftNode(IQueryTree left); /** * 获取 join 元素 * * @return */ IQueryTree getLeftNode(); /** * 设置右join 元素 * * @param right * @return */ IJoin setRightNode(IQueryTree right); /** * 获取左join元素 * * @return */ IQueryTree getRightNode(); /** * 设置join的列 * * @param leftColumns * @param rightColumns * @return */ IJoin setJoinOnColumns(List<ISelectable> leftColumns, List<ISelectable> rightColumns); /** * 添加左left join的列 * * @param left * @return */ IJoin addLeftJoinOnColumn(ISelectable left); /** * 获取左join的列 * * @return */ List<ISelectable> getLeftJoinOnColumns(); /** * 添加 右left join的列 * * @param right * @return */ IJoin addRightJoinOnColumn(ISelectable right); /** * 获取右join的列名 * * @return */ List<ISelectable> getRightJoinOnColumns(); /** * 设置join类型 * * @param joinType * @return */ IJoin setJoinStrategy(JoinStrategy joinStrategy); /** * 获取join类型 * * @return */ JoinStrategy getJoinStrategy(); /** * 是否左outer join * * @return */ Boolean getLeftOuter(); /** * 是否右outer join * * @return */ Boolean getRightOuter(); /** * 获取左outer join * * @param on_off * @return */ IJoin setLeftOuter(boolean on_off); /** * 设置右 outer join * * @param on_off * @return */ IJoin setRightOuter(boolean on_off); /** * 非column=column的join on中的条件 * * @return */ public IFilter getOtherJoinOnFilter(); public IJoin setOtherJoinOnFilter(IFilter otherJoinOnFilter); /** * 包含where后的所有条件,仅用于拼sql * * @return */ public IFilter getWhereFilter(); public IJoin setWhereFilter(IFilter whereFilter); }