001package gudusoft.gsqlparser.ir.logical.rel;
002
003import gudusoft.gsqlparser.ir.common.SourceAnchor;
004import gudusoft.gsqlparser.ir.logical.*;
005
006import java.util.Arrays;
007import java.util.List;
008
009/**
010 * JOIN operation.
011 */
012public final class Join extends RelNode {
013
014    public enum JoinType {
015        INNER, LEFT, RIGHT, FULL, CROSS, NATURAL, SEMI, ANTI
016    }
017
018    private final RelNode left;
019    private final RelNode right;
020    private final JoinType joinType;
021    private final RexNode condition;
022
023    public Join(RelNode left, RelNode right, JoinType joinType, RexNode condition, SourceAnchor anchor) {
024        super(RelNodeKind.JOIN, anchor);
025        this.left = left;
026        this.right = right;
027        this.joinType = joinType;
028        this.condition = condition;
029    }
030
031    public RelNode getLeft() { return left; }
032    public RelNode getRight() { return right; }
033    public JoinType getJoinType() { return joinType; }
034    public RexNode getCondition() { return condition; }
035
036    @Override
037    public List<RelNode> getInputs() { return Arrays.asList(left, right); }
038
039    @Override
040    public <R> R accept(RelNodeVisitor<R> visitor) { return visitor.visitJoin(this); }
041}