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 TENANT} (Phase 4 Batch 1).
012 *
013 * <p>Populated by the {@code oceanbasemysql} grammar's
014 * {@code createTenantStmt} rule. The statement class
015 * {@code TCreateTenantSqlStatement} extracts typed fields from this node
016 * during {@code doParseStatement()}.
017 *
018 * @since 4.0.1.4
019 */
020public class TOceanbaseCreateTenantSqlNode extends TParseTreeNode {
021
022    private TObjectName tenantName;
023    private boolean ifNotExists;
024    private ArrayList<TOceanbaseTenantOption> tenantOptions
025            = new ArrayList<TOceanbaseTenantOption>();
026
027    public TObjectName getTenantName() {
028        return tenantName;
029    }
030
031    public void setTenantName(TObjectName tenantName) {
032        this.tenantName = tenantName;
033        if (tenantName != null) {
034            tenantName.setDbObjectType(EDbObjectType.database);
035        }
036    }
037
038    public boolean isIfNotExists() {
039        return ifNotExists;
040    }
041
042    public void setIfNotExists(boolean ifNotExists) {
043        this.ifNotExists = ifNotExists;
044    }
045
046    public ArrayList<TOceanbaseTenantOption> getTenantOptions() {
047        return tenantOptions;
048    }
049
050    public void addTenantOption(TOceanbaseTenantOption option) {
051        if (option != null) {
052            this.tenantOptions.add(option);
053        }
054    }
055
056    @Override
057    public void init(Object arg1) {
058        setTenantName((TObjectName) arg1);
059    }
060
061    @Override
062    public void accept(TParseTreeVisitor v) {
063        v.preVisit(this);
064        v.postVisit(this);
065    }
066
067    @Override
068    public void acceptChildren(TParseTreeVisitor v) {
069        v.preVisit(this);
070        if (tenantName != null) {
071            tenantName.acceptChildren(v);
072        }
073        if (tenantOptions != null) {
074            for (TOceanbaseTenantOption opt : tenantOptions) {
075                if (opt != null) {
076                    opt.acceptChildren(v);
077                }
078            }
079        }
080        v.postVisit(this);
081    }
082}