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 * Vendor-specific relational node that cannot be normalized.
013 * <p>
014 * Carries the original source anchor and dialect tag so the
015 * feature is never silently dropped or incorrectly flattened.
016 */
017public final class VendorSpecificRel extends RelNode {
018    private final String dialect;
019    private final String description;
020    private final List<RelNode> inputs;
021
022    public VendorSpecificRel(String dialect, String description,
023                             List<RelNode> inputs, SourceAnchor anchor) {
024        super(RelNodeKind.VENDOR_SPECIFIC, anchor);
025        this.dialect = dialect;
026        this.description = description;
027        this.inputs = inputs != null ? Collections.unmodifiableList(inputs) : Collections.<RelNode>emptyList();
028    }
029
030    public String getDialect() { return dialect; }
031    public String getDescription() { return description; }
032
033    @Override
034    public List<RelNode> getInputs() { return inputs; }
035
036    @Override
037    public <R> R accept(RelNodeVisitor<R> visitor) { return visitor.visitVendorSpecific(this); }
038}