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 * SELECT columns/expressions projection.
011 */
012public final class Project extends RelNode {
013    private final RelNode input;
014    private final List<RexNode> expressions;
015    private final List<String> aliases;
016
017    public Project(RelNode input, List<RexNode> expressions, List<String> aliases, SourceAnchor anchor) {
018        super(RelNodeKind.PROJECT, anchor);
019        this.input = input;
020        this.expressions = expressions != null ? Collections.unmodifiableList(expressions) : Collections.<RexNode>emptyList();
021        this.aliases = aliases != null ? Collections.unmodifiableList(aliases) : Collections.<String>emptyList();
022    }
023
024    public RelNode getInput() { return input; }
025    public List<RexNode> getExpressions() { return expressions; }
026    public List<String> getAliases() { return aliases; }
027
028    @Override
029    public List<RelNode> getInputs() { return Collections.singletonList(input); }
030
031    @Override
032    public <R> R accept(RelNodeVisitor<R> visitor) { return visitor.visitProject(this); }
033}