001package gudusoft.gsqlparser.ir.logical.rel;
002
003import gudusoft.gsqlparser.ir.common.SourceAnchor;
004import gudusoft.gsqlparser.ir.logical.RelNode;
005import gudusoft.gsqlparser.ir.logical.RelNodeKind;
006import gudusoft.gsqlparser.ir.logical.RelNodeVisitor;
007
008import java.util.Collections;
009import java.util.List;
010
011/**
012 * UNION / INTERSECT / EXCEPT set operation.
013 */
014public final class SetOp extends RelNode {
015
016    public enum OpType {
017        UNION, UNION_ALL, INTERSECT, INTERSECT_ALL, EXCEPT, EXCEPT_ALL
018    }
019
020    private final List<RelNode> inputs;
021    private final OpType opType;
022
023    public SetOp(List<RelNode> inputs, OpType opType, SourceAnchor anchor) {
024        super(RelNodeKind.SET_OP, anchor);
025        this.inputs = inputs != null ? Collections.unmodifiableList(inputs) : Collections.<RelNode>emptyList();
026        this.opType = opType;
027    }
028
029    public OpType getOpType() { return opType; }
030
031    @Override
032    public List<RelNode> getInputs() { return inputs; }
033
034    @Override
035    public <R> R accept(RelNodeVisitor<R> visitor) { return visitor.visitSetOp(this); }
036}