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.TOceanbaseCreateResourceUnitSqlNode;
009import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseResourceOption;
010
011import java.util.ArrayList;
012
013/**
014 * OceanBase {@code CREATE RESOURCE UNIT} statement (Phase 4 Batch 2).
015 *
016 * <p>Tagged {@link ESqlStatementType#sstoceanbase_create_resource_unit}.
017 *
018 * @since 4.0.1.4
019 */
020public class TCreateResourceUnitSqlStatement extends TCustomSqlStatement {
021
022    private TObjectName unitName;
023    private ArrayList<TOceanbaseResourceOption> resourceOptions
024            = new ArrayList<TOceanbaseResourceOption>();
025
026    public TCreateResourceUnitSqlStatement(EDbVendor dbvendor) {
027        super(dbvendor);
028        this.sqlstatementtype = ESqlStatementType.sstoceanbase_create_resource_unit;
029    }
030
031    public TObjectName getUnitName() {
032        return unitName;
033    }
034
035    public ArrayList<TOceanbaseResourceOption> getResourceOptions() {
036        return resourceOptions;
037    }
038
039    public TObjectName getMinCpu()        { return firstValueOfOption("MIN_CPU"); }
040    public TObjectName getMaxCpu()        { return firstValueOfOption("MAX_CPU"); }
041    public TObjectName getMemorySize()    { return firstValueOfOption("MEMORY_SIZE"); }
042    public TObjectName getLogDiskSize()   { return firstValueOfOption("LOG_DISK_SIZE"); }
043    public TObjectName getMinIops()       { return firstValueOfOption("MIN_IOPS"); }
044    public TObjectName getMaxIops()       { return firstValueOfOption("MAX_IOPS"); }
045    public TObjectName getIopsWeight()    { return firstValueOfOption("IOPS_WEIGHT"); }
046    public TObjectName getMaxSessionNum() { return firstValueOfOption("MAX_SESSION_NUM"); }
047
048    private TObjectName firstValueOfOption(String canonicalName) {
049        for (TOceanbaseResourceOption opt : resourceOptions) {
050            if (opt == null || opt.getName() == null) continue;
051            if (canonicalName.equals(opt.getName())) {
052                return opt.getFirstValue();
053            }
054        }
055        return null;
056    }
057
058    @Override
059    public int doParseStatement(TCustomSqlStatement psql) {
060        if (rootNode == null) return -1;
061        super.doParseStatement(psql);
062        TOceanbaseCreateResourceUnitSqlNode node =
063                (TOceanbaseCreateResourceUnitSqlNode) rootNode;
064        this.unitName = node.getUnitName();
065        this.resourceOptions = node.getResourceOptions();
066        return 0;
067    }
068
069    @Override
070    public void accept(TParseTreeVisitor v) {
071        v.preVisit(this);
072        v.postVisit(this);
073    }
074
075    @Override
076    public void acceptChildren(TParseTreeVisitor v) {
077        v.preVisit(this);
078        v.postVisit(this);
079    }
080}