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 * UPDATE statement.
011 */
012public final class DmlUpdate extends RelNode {
013    private final String targetTable;
014    private final List<RexNode> assignments;
015    private final RelNode source;
016    private final RexNode filter;
017
018    public DmlUpdate(String targetTable, List<RexNode> assignments,
019                     RelNode source, RexNode filter, SourceAnchor anchor) {
020        super(RelNodeKind.DML_UPDATE, anchor);
021        this.targetTable = targetTable;
022        this.assignments = assignments != null ? Collections.unmodifiableList(assignments) : Collections.<RexNode>emptyList();
023        this.source = source;
024        this.filter = filter;
025    }
026
027    public String getTargetTable() { return targetTable; }
028    public List<RexNode> getAssignments() { return assignments; }
029    public RelNode getSource() { return source; }
030    public RexNode getFilter() { return filter; }
031
032    @Override
033    public List<RelNode> getInputs() {
034        return source != null ? Collections.singletonList(source) : Collections.<RelNode>emptyList();
035    }
036
037    @Override
038    public <R> R accept(RelNodeVisitor<R> visitor) { return visitor.visitDmlUpdate(this); }
039}