001package gudusoft.gsqlparser.stmt.oceanbase;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.nodes.TObjectName;
007import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
008import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseCreateDblinkSqlNode;
009import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseDblinkOption;
010
011import java.util.ArrayList;
012
013/**
014 * OceanBase {@code CREATE DBLINK} statement (US-005 Round 3).
015 *
016 * <p>Tagged {@link ESqlStatementType#sstoceanbase_create_dblink}.
017 *
018 * @since 4.0.1.4
019 */
020public class TCreateDblinkSqlStatement extends TCustomSqlStatement {
021
022    private TObjectName dblinkName;
023    private boolean ifNotExists;
024    private ArrayList<TOceanbaseDblinkOption> dblinkOptions
025            = new ArrayList<TOceanbaseDblinkOption>();
026
027    public TCreateDblinkSqlStatement(EDbVendor dbvendor) {
028        super(dbvendor);
029        this.sqlstatementtype = ESqlStatementType.sstoceanbase_create_dblink;
030    }
031
032    public TObjectName getDblinkName() {
033        return dblinkName;
034    }
035
036    public boolean isIfNotExists() {
037        return ifNotExists;
038    }
039
040    public ArrayList<TOceanbaseDblinkOption> getDblinkOptions() {
041        return dblinkOptions;
042    }
043
044    public TObjectName getOptionValue(String canonicalName) {
045        if (canonicalName == null) return null;
046        for (TOceanbaseDblinkOption opt : dblinkOptions) {
047            if (opt == null || opt.getName() == null) continue;
048            if (canonicalName.equals(opt.getName())) {
049                return opt.getValue();
050            }
051        }
052        return null;
053    }
054
055    @Override
056    public int doParseStatement(TCustomSqlStatement psql) {
057        if (rootNode == null) return -1;
058        super.doParseStatement(psql);
059        TOceanbaseCreateDblinkSqlNode node = (TOceanbaseCreateDblinkSqlNode) rootNode;
060        this.dblinkName = node.getDblinkName();
061        this.ifNotExists = node.isIfNotExists();
062        this.dblinkOptions = node.getDblinkOptions();
063        return 0;
064    }
065
066    @Override
067    public void accept(TParseTreeVisitor v) {
068        v.preVisit(this);
069        v.postVisit(this);
070    }
071
072    @Override
073    public void acceptChildren(TParseTreeVisitor v) {
074        v.preVisit(this);
075        v.postVisit(this);
076    }
077}