001package gudusoft.gsqlparser.nodes.oceanbase;
002
003import gudusoft.gsqlparser.EDbObjectType;
004import gudusoft.gsqlparser.nodes.TObjectName;
005import gudusoft.gsqlparser.nodes.TParseTreeNode;
006import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
007
008import java.util.ArrayList;
009
010/**
011 * AST node for OceanBase {@code CREATE DBLINK} (US-005 Round 3).
012 *
013 * <p>Supports {@code CREATE DBLINK [IF NOT EXISTS] name TENANT = ... HOST = ...
014 * PORT = ... DATABASE = ... USER = ... PASSWORD = ...}.
015 *
016 * @since 4.0.1.4
017 */
018public class TOceanbaseCreateDblinkSqlNode extends TParseTreeNode {
019
020    private TObjectName dblinkName;
021    private boolean ifNotExists;
022    private ArrayList<TOceanbaseDblinkOption> dblinkOptions
023            = new ArrayList<TOceanbaseDblinkOption>();
024
025    public TObjectName getDblinkName() {
026        return dblinkName;
027    }
028
029    public void setDblinkName(TObjectName dblinkName) {
030        this.dblinkName = dblinkName;
031        if (dblinkName != null) {
032            dblinkName.setDbObjectType(EDbObjectType.database);
033        }
034    }
035
036    public boolean isIfNotExists() {
037        return ifNotExists;
038    }
039
040    public void setIfNotExists(boolean ifNotExists) {
041        this.ifNotExists = ifNotExists;
042    }
043
044    public ArrayList<TOceanbaseDblinkOption> getDblinkOptions() {
045        return dblinkOptions;
046    }
047
048    public void addDblinkOption(TOceanbaseDblinkOption option) {
049        if (option != null) {
050            this.dblinkOptions.add(option);
051        }
052    }
053
054    @Override
055    public void init(Object arg1) {
056        setDblinkName((TObjectName) arg1);
057    }
058
059    @Override
060    public void accept(TParseTreeVisitor v) {
061        v.preVisit(this);
062        v.postVisit(this);
063    }
064
065    @Override
066    public void acceptChildren(TParseTreeVisitor v) {
067        v.preVisit(this);
068        if (dblinkName != null) {
069            dblinkName.acceptChildren(v);
070        }
071        if (dblinkOptions != null) {
072            for (TOceanbaseDblinkOption opt : dblinkOptions) {
073                if (opt != null) {
074                    opt.acceptChildren(v);
075                }
076            }
077        }
078        v.postVisit(this);
079    }
080}