001package gudusoft.gsqlparser.ir.logical.rel;
002
003import gudusoft.gsqlparser.ir.common.SourceAnchor;
004import gudusoft.gsqlparser.ir.logical.*;
005
006import java.util.Collections;
007import java.util.List;
008
009/**
010 * ORDER BY + LIMIT/OFFSET.
011 */
012public final class Sort extends RelNode {
013    private final RelNode input;
014    private final List<RexNode> orderBy;
015    private final RexNode limit;
016    private final RexNode offset;
017
018    public Sort(RelNode input, List<RexNode> orderBy, RexNode limit, RexNode offset, SourceAnchor anchor) {
019        super(RelNodeKind.SORT, anchor);
020        this.input = input;
021        this.orderBy = orderBy != null ? Collections.unmodifiableList(orderBy) : Collections.<RexNode>emptyList();
022        this.limit = limit;
023        this.offset = offset;
024    }
025
026    public RelNode getInput() { return input; }
027    public List<RexNode> getOrderBy() { return orderBy; }
028    public RexNode getLimit() { return limit; }
029    public RexNode getOffset() { return offset; }
030
031    @Override
032    public List<RelNode> getInputs() { return Collections.singletonList(input); }
033
034    @Override
035    public <R> R accept(RelNodeVisitor<R> visitor) { return visitor.visitSort(this); }
036}