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 RESOURCE UNIT} (Phase 4 Batch 2).
012 *
013 * <p>Grammar shape:
014 * {@code CREATE RESOURCE UNIT name [MIN_CPU = n, MAX_CPU = n,
015 * MEMORY_SIZE = 'xG', LOG_DISK_SIZE = 'xG', MIN_IOPS = n, MAX_IOPS = n,
016 * IOPS_WEIGHT = n, MAX_SESSION_NUM = n]}.
017 *
018 * @since 4.0.1.4
019 */
020public class TOceanbaseCreateResourceUnitSqlNode extends TParseTreeNode {
021
022    private TObjectName unitName;
023    private ArrayList<TOceanbaseResourceOption> resourceOptions
024            = new ArrayList<TOceanbaseResourceOption>();
025
026    public TObjectName getUnitName() {
027        return unitName;
028    }
029
030    public void setUnitName(TObjectName unitName) {
031        this.unitName = unitName;
032        if (unitName != null) {
033            unitName.setDbObjectType(EDbObjectType.database);
034        }
035    }
036
037    public ArrayList<TOceanbaseResourceOption> getResourceOptions() {
038        return resourceOptions;
039    }
040
041    public void addResourceOption(TOceanbaseResourceOption option) {
042        if (option != null) {
043            this.resourceOptions.add(option);
044        }
045    }
046
047    @Override
048    public void init(Object arg1) {
049        setUnitName((TObjectName) arg1);
050    }
051
052    @Override
053    public void accept(TParseTreeVisitor v) {
054        v.preVisit(this);
055        v.postVisit(this);
056    }
057
058    @Override
059    public void acceptChildren(TParseTreeVisitor v) {
060        v.preVisit(this);
061        if (unitName != null) {
062            unitName.acceptChildren(v);
063        }
064        if (resourceOptions != null) {
065            for (TOceanbaseResourceOption opt : resourceOptions) {
066                if (opt != null) {
067                    opt.acceptChildren(v);
068                }
069            }
070        }
071        v.postVisit(this);
072    }
073}