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.TOceanbaseAlterResourcePoolSqlNode;
009import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseAlterResourcePoolSqlNode.EAction;
010import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseResourceOption;
011
012import java.util.ArrayList;
013
014/**
015 * OceanBase {@code ALTER RESOURCE POOL} statement (Phase 4 Batch 2).
016 *
017 * <p>{@link #getActionType()} distinguishes the two documented forms:
018 * {@link EAction#UPDATE_OPTIONS} for plain option updates
019 * ({@code ALTER RESOURCE POOL p UNIT_NUM = 4}) and {@link EAction#SPLIT}
020 * for {@code ALTER RESOURCE POOL p SPLIT INTO (p1,p2) ON ('z1','z2')}.
021 *
022 * <p>Tagged {@link ESqlStatementType#sstoceanbase_alter_resource_pool}.
023 *
024 * @since 4.0.1.4
025 */
026public class TAlterResourcePoolSqlStatement extends TCustomSqlStatement {
027
028    private TObjectName poolName;
029    private EAction actionType;
030    private ArrayList<TOceanbaseResourceOption> resourceOptions
031            = new ArrayList<TOceanbaseResourceOption>();
032    private ArrayList<TObjectName> splitPoolNames
033            = new ArrayList<TObjectName>();
034    private ArrayList<TObjectName> splitZoneValues
035            = new ArrayList<TObjectName>();
036
037    public TAlterResourcePoolSqlStatement(EDbVendor dbvendor) {
038        super(dbvendor);
039        this.sqlstatementtype = ESqlStatementType.sstoceanbase_alter_resource_pool;
040    }
041
042    public TObjectName getPoolName() {
043        return poolName;
044    }
045
046    public EAction getActionType() {
047        return actionType;
048    }
049
050    public ArrayList<TOceanbaseResourceOption> getResourceOptions() {
051        return resourceOptions;
052    }
053
054    public ArrayList<TObjectName> getSplitPoolNames() {
055        return splitPoolNames;
056    }
057
058    public ArrayList<TObjectName> getSplitZoneValues() {
059        return splitZoneValues;
060    }
061
062    @Override
063    public int doParseStatement(TCustomSqlStatement psql) {
064        if (rootNode == null) return -1;
065        super.doParseStatement(psql);
066        TOceanbaseAlterResourcePoolSqlNode node =
067                (TOceanbaseAlterResourcePoolSqlNode) rootNode;
068        this.poolName = node.getPoolName();
069        this.actionType = node.getActionType();
070        this.resourceOptions = node.getResourceOptions();
071        this.splitPoolNames = node.getSplitPoolNames();
072        this.splitZoneValues = node.getSplitZoneValues();
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}