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.TOceanbaseAlterTenantSqlNode;
009import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseAlterTenantSqlNode.EAction;
010import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseTenantOption;
011
012import java.util.ArrayList;
013
014/**
015 * OceanBase {@code ALTER TENANT} statement (Phase 4 Batch 1).
016 *
017 * <p>{@link #getActionType()} selects one of the five documented
018 * {@code ALTER TENANT} forms:
019 * {@code SET} options list, {@code ADD PRIMARY_ZONE},
020 * {@code RENAME TO}, {@code LOCK}, and {@code UNLOCK}. Downstream code can
021 * switch on the action type and read just the relevant fields
022 * ({@link #getTenantOptions()}, {@link #getNewTenantName()},
023 * {@link #getPrimaryZoneValue()}).
024 *
025 * <p>Tagged {@link ESqlStatementType#sstoceanbase_alter_tenant}.
026 *
027 * @since 4.0.1.4
028 */
029public class TAlterTenantSqlStatement extends TCustomSqlStatement {
030
031    private TObjectName tenantName;
032    private EAction actionType;
033    private TObjectName newTenantName;
034    private TObjectName primaryZoneValue;
035    private ArrayList<TOceanbaseTenantOption> tenantOptions
036            = new ArrayList<TOceanbaseTenantOption>();
037
038    public TAlterTenantSqlStatement(EDbVendor dbvendor) {
039        super(dbvendor);
040        this.sqlstatementtype = ESqlStatementType.sstoceanbase_alter_tenant;
041    }
042
043    public TObjectName getTenantName() {
044        return tenantName;
045    }
046
047    public EAction getActionType() {
048        return actionType;
049    }
050
051    public TObjectName getNewTenantName() {
052        return newTenantName;
053    }
054
055    public TObjectName getPrimaryZoneValue() {
056        return primaryZoneValue;
057    }
058
059    public ArrayList<TOceanbaseTenantOption> getTenantOptions() {
060        return tenantOptions;
061    }
062
063    @Override
064    public int doParseStatement(TCustomSqlStatement psql) {
065        if (rootNode == null) return -1;
066        super.doParseStatement(psql);
067        TOceanbaseAlterTenantSqlNode node = (TOceanbaseAlterTenantSqlNode) rootNode;
068        this.tenantName = node.getTenantName();
069        this.actionType = node.getActionType();
070        this.newTenantName = node.getNewTenantName();
071        this.primaryZoneValue = node.getPrimaryZoneValue();
072        this.tenantOptions = node.getTenantOptions();
073        return 0;
074    }
075
076    @Override
077    public void accept(TParseTreeVisitor v) {
078        v.preVisit(this);
079        v.postVisit(this);
080    }
081
082    @Override
083    public void acceptChildren(TParseTreeVisitor v) {
084        v.preVisit(this);
085        v.postVisit(this);
086    }
087}